- PR -

ノータッチ・デプロイメントで起動パラメータを設定後WebServiceが使用出来ないのですが。

投稿者投稿内容
Sライダー
会議室デビュー日: 2003/10/14
投稿数: 8
投稿日時: 2003-10-14 09:22
はじめまして"Sライダー"です

ノータッチ・デプロイメントで引数を使用し起動しているのですが
起動自体は出来ますが起動後WebServiceが使用出来ません。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnforms/html/winforms05152003.asp
↑を参考にパラメータを設定し起動は出来ました。


やりたい事はASP.NETからWindowsフォームを起動しWindowsフォームから
WebServiceの関数を呼出したいのですが。。。以下のエラーが出ます。
エラーメッセージ:
「XMLファイル http://〜〜.config 指定されたエンコードに無効な文字があります」

ASP.NETでCookieを使用している情報をWindowsフォームに渡す方法ならどんな
方法でもいいので色々試してみたのですが、取りあえずこの方法で進めているので
引数を受け取った後WebServiceの関数を使用する方法を教えてください。





[ メッセージ編集済み 編集者: Sライダー 編集日時 2003-10-14 10:45 ]
TAN
会議室デビュー日: 2002/07/17
投稿数: 4
投稿日時: 2003-10-15 10:21
こんにちは。
私も昨日から、この問題で悩んでいます。
多分、Webサービスの参照をダイナミックにすると、
app.configというファイルにURLが保存されます。
実行時には、「app.config」というファイルは、exe形式の名前+.congig
になってしまいます。(test.exeであれば、test.exe.config)
ノータッチ・デプロイメントで起動パラメータを指定すると、
指定したURL+.configというファイルを探してしまいます。
(test.exe?uid=123であれば、test.exe?uid=123.config)
このようなファイルが無いので、エラーが発生すると思います。
app.configファイルを使用しながら、
ノータッチ・デプロイメントで起動パラメータを指定するアプリケーションは
作成できないような気がします。(まだ、十分に検討していませんが)

app.configでは無く、独自のファイルからWebサービスのURLを受け取り、
Reference.vbというファイルの中でURLを設定している箇所を強制的に書き換えて
行う方法があると思いますが、まだ、テストしていません。

答えになっていませんので、申し訳ないのですが、
どなたか、解決策が有りませんでしょうか。
Sライダー
会議室デビュー日: 2003/10/14
投稿数: 8
投稿日時: 2003-10-15 10:45
こんにちは。

私も色々試したのですが。。。
取りあえず試した方法と結果ですが。
・APIで呼出する前にCookieに書き込み呼出し後、同じくAPIでCookieを読み込む
 →書き込む事は可能だがWindowsフォーム側でAPIを使用すると起動
  できなくなる(InternetGetCookieを使用)
・起動前にexeの構成ファイルに書き込む(〜〜.exe.config)
 →ASP.NET側でAppSettings.Setが使用できない(ビルドエラーは出ないが書き
  込めない)

私もTAN様のご指摘通りURLを受け取った後書き直すか、構成ファイルに何とか
書き込めればいいと思っているのですが、、

構成ファイルに書き込む方法は私のやり方が悪いのかもしれないのでどなたか
ご存知ならご教授下さい。

今は以下の通りになっています。
------- ASP.NET側(ソース) -------
Dim lclsConfig As ConfigurationSettings

lclsConfig.AppSettings.Set("Test_Key", "1234")

------- ASP.NET側(デザインのHTML) -------
<link href="http://a-murakami/es150/es150c00.exe.config" rel="subsection">

------- Windowsフォーム側(Configファイル) -------
<appSettings>
<add key="Test_Key" value="0" />


</appSettings>

------- Windowsフォーム側(ソース) -------
lsUserId = Configuration.ConfigurationSettings.AppSettings.Get("Test_Key")
↑ここでは問題なく取得出来ます

[ メッセージ編集済み 編集者: Sライダー 編集日時 2003-10-15 11:04 ]
むちん
会議室デビュー日: 2004/05/25
投稿数: 8
投稿日時: 2004-05-27 19:06
遅ればせながら今この問題に直面し解決できずに困っております.
最終的にどのようにされたか,また解決策がありましたら教えて
いただけないでしょうか?
hogehoge
会議室デビュー日: 2004/05/24
投稿数: 8
投稿日時: 2004-05-27 22:32
WebServiceを実行するプロセスはWindowsFormなんですよね?
WindowsFormのAppConfigに値を設定すればよいのでは?
見当違いだったらすいません。
むちん
会議室デビュー日: 2004/05/25
投稿数: 8
投稿日時: 2004-05-28 13:39
返答ありがとうございます.
情報の少ない書き込みで失礼しました.

>WebServiceを実行するプロセスはWindowsFormなんですよね?
はい.
開発:VS.NET 2003
言語:VB.NET
にて,WebServiceを呼ぶ WindowsFormを作成しています.

>WindowsFormのAppConfigに値を設定すればよいのでは?
System.Configuration.??? あたりのクラスで操作できる
のかなと思い今調べているところです.

引き続き自分でも調べてみますが,もしクラス名かメソッドなど
をご存知でしたら教えていただけますか?

よろしくお願いします.
yama
会議室デビュー日: 2002/12/25
投稿数: 10
投稿日時: 2004-06-04 10:32
起動パラメータを参考にされたMSDNのページに.configファイルの
対応方法も書いてありますよ。
サンプルファイルをDLして見てください。

ノータッチデプロイメントのexeを置くIISの仮想ディレクトリに
設定をして、web.config使ったりして対応するみたいです。
むちん
会議室デビュー日: 2004/05/25
投稿数: 8
投稿日時: 2004-06-07 11:49
yamaさん返答ありがとうございます.
教えていただいた方法で解決することができました.
ベストな方法かわかりませんが,手順を書いておきます.

a.ハンドラの作成


  1. Visual Basic .NET で、Handler という名前の新しいクラス ライブラリ プロジェクトを作成
  2. System.Web.dll アセンブリへの参照を設定
  3. コードは下記
    ※ MSDN の Launching No-Touch Deployment Applications with Command Line Arguments にある
    C#のコードをVB.NETに変換したもの
    コード:
    Imports System
    Imports System.Web
    
    Public Class ConfigFileHandler : Implements IHttpHandler
    
        Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    
            'Just the .exe part in the file system
            Dim path As String = context.Request.PhysicalPath
    
            'The entire request URL, include args and .config
            Dim url As String = context.Request.RawUrl
    
            'If someone's asking for a .config, strip the arguments
            Dim ext As String = ".config"
    
            If (url.ToLower().EndsWith(ext)) Then
                context.Response.WriteFile(path + ext)
    
            'If someone's asking for the .exe, send it
            Else
                context.Response.ContentType = "application/octet-stream"
                context.Response.WriteFile(path)
            End If
        End Sub
    
        Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
            Get
                Return True
            End Get
        End Property
    End Class



  4. コンパイル


b.ハンドラの配置


  1. ノータッチデプロイメントのexeファイルを配置しているフォルダの下に Bin フォルダ作成
    例) C:\Inetpub\wwwroot\NTD\Bin
  2. コンパイルで生成された ConfigFileHandler.dll を Binディレクトリにコピー
  3. [インターネット サービス マネージャ] を開く
  4. NTD ディレクトリを Web アプリケーションとする
  5. NTD の[プロパティ]→[ディレクトリ] タブ→ [構成] をクリック
  6. [追加] をクリック
      [実行ファイル] C:\ WINNT \Microsoft.NET\Framework\<バージョン番号>\Aspnet_isapi.dll
      (※既に登録されている拡張子の登録内容をコピーすればOK)
      [拡張子] .exe
      [ファイルの存在を確認する] オフ
  7. [OK]


c.Web.config の作成・配置


  1. ノータッチデプロイメントのexeファイルを配置しているフォルダに Web.config を作成
    例) C:\Inetpub\wwwroot\NTD\Web.config

  2. 内容
    コード:
    <?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>




<参考にしたサイト>
http://www.atmarkit.co.jp/fdotnet/dotnettips/123aspadext/aspadext.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/114iisrelate/iisrelate.html
http://support.microsoft.com/default.aspx?scid=kb;ja;307997

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