- PR -

スマートクライアントにパラメータを渡してWebサービス呼出したいのですが

1
投稿者投稿内容
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2008-03-12 19:53
OS:winServer2003
IIS:6.0

いつも参考にさせていただいております。

現在、Webアプリから(ASP.NET)スマートクライアント呼び出し時に、
引数を使用し起動しているのですが、起動がうまくいきません。

まさに

1.http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6860&forum=7

で出ている質問と同じで、ここには解決方法ものってます。
早速、

2.http://msdn2.microsoft.com/en-us/library/ms951072.aspx

を参考にしてみたのですが、いまだうまくいきません。
何がいけないのか、はまっております。
何かをしくじっているのだと思います。
さんざん既出の事で恐縮ですが、どなたかアドバイスいただけますでしょうか?

念のため、こちらでの作業も記述させていただきます。

コード:
asp.net側(Webアプリ)

// ハイパーリンクに、URLをセット
hpTxt.NavigateUrl = smartClientUrl + "Test.exe?uid=9999"



smartClientUrl は具体的にはサーバーのTest.exeがあるフォルダで、
他のスマートクライアントのexeも存在し、すでにWebアプリからの呼び出し可能な
場所です。(IISで仮想フォルダ設定してあります。)
他のスマートクライアント(引数なし)は正常に起動できます。

コード:
test.exe側(windowsアプリMain.cs)
[STAThread]
static void Main(string[] argsFromMain) 
{
    // コマンドライン引数の取得
    string uid = "";
    string[] args = WebCommandLineHelper.GetCommandLineArgs(argsFromMain);
          ↑このメソッドは、2.のサイトをコピーして作成
    foreach( string arg in args ) 
    {
        string[] pair = arg.Split('=');
        switch( pair[0].ToLower() ) 
        {
            case "uid":
	   uid = pair[1];
	   break;
        }
    }
    MainForm main = new MainForm();
    main.SkUsrId = Int32.Parse(uid);
    Application.Run(main);
}



1.ハンドラクラスを作成し、exeファイルを配置しているフォルダの下にBin フォルダを作成し、
  ハンドラクラスのdllを配置
2.exeファイルを配置しているフォルダの下にWeb.configを作成
3.IISで、exeファイルを配置しているフォルダの
  [プロパティ]→[仮想ディレクトリ] タブ→ [構成]→[追加]をクリックし、
  [実行ファイル] C: WINNT Microsoft.NETFramework<バージョン番号>Aspnet_isapi.dll
  [拡張子] .exe
  を追加。
   
コード:
ハンドラクラス

using System;
using System.Web;

namespace Handler
{
  public class ConfigFileHandler : IHttpHandler

  public void ProcessRequest(HttpContext context) 
  {
   string path = context.Request.PhysicalPath;
   string url = context.Request.RawUrl;
   string ext = ".config";
   if( url.ToLower().EndsWith(ext) ) 
   {
	context.Response.WriteFile(path + ext);
   }
   else 
   {
	context.Response.ContentType = "application/octet-stream";
	context.Response.WriteFile(path);
   }
 }
 public bool IsReusable 
 {
  get { return true; }
 }
}



コード:
exeがあるフォルダのWeb.config

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <system.web>
    <httpHandlers>
      <!-- map .exe and .exe?blah.config files to our handler -->
      <add verb="*" path="*.exe" type="Handler.ConfigFileHandler, ConfigFileHandler" />
      <!-- allow .config files but disable web.config files -->
      <remove verb="*" path="*.config" />
      <add verb="*" path="web.config" type="System.Web.HttpForbiddenHandler"/>
    </httpHandlers>
 </system.web>
</configuration>



以上で、起動しますと、

'System.IO.FileLoadException' のハンドルされていない例外が IEExec.exe で発生しました。
追加情報 : 見つかったアセンブリのマニフェストの定義 'Test.exe?uid=9999' はアセンブリの参照と一致しません。

と表示されます。
ハンドラが効いていないということでしょうか?

何かお気づきの点がありましたら、ぜひアドバイスお願いいたします。

2004年に出ている話なんですよね・・・。









1

スキルアップ/キャリアアップ(JOB@IT)