VBScript/ASP から WCF サービスへの HTTP ポストを実行して応答を取得するために使用されるメッセージをフォーマットするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/76925

  •  09-06-2019
  •  | 
  •  

質問

投稿することは問題ではありません。応答を得るためにメッセージをフォーマットすることが問題です。

理想的には、メッセージを作成し、WinHTTP を使用して WCF サービス (IIS でホストされている) に投稿して応答を取得できればよいのですが、これまでのところ、適切に動作するものを構築できませんでした。

これを簡単に実行できる例はありますか?

2.0 Web サービスの世界では、これは web.config に設定を入れてサービスが投稿に応答するようにし、適切なパラメータを指定して適切な Web メソッドを呼び出すだけで簡単でした。WCF の世界にはこれに相当するものはないようです。

現時点では、コンシューマー (vbscript 側) を .NET に変換するオプションはありません。

この時点で、エンドポイントでは、.NET 3.5 でサポートされているものまで、利用可能なバインディングを使用して変換できると仮定しますが、同時にこれが WsHttpBinding または BasicHttpBinding を使用して実行できる場合、これに対する適切な答えは次のようになります。 VBScript のコンテキストでこれらのバインディングのいずれかに対してメッセージをフォーマットする方法を説明するか、それを行う方法がない場合は、「それはできません」とだけ言ってください。WebHTTPBinding を使用してこれを実行できる場合、WebInvoke 属性をすでに調査しましたが、正しく動作する VBScript から WCF へのテストを作成できなかったため、それを実現する方法が見つかりませんでした。

ポストされたデータ型が文字列であり、応答も文字列であると仮定します。

また、この質問は WinHTTP 関連ではありません。WinHTTP を使用して投稿を実行する方法はすでに知っていますが、問題は WCF サービスが応答するメッセージの構築です。

WinHTTP 以外のものを使用して、XMLHTTP などの ASP から WCF サービスへのポストを実行することもできますが、WCF サービスが応答する XML メッセージを構築するという問題が依然として残ります。これのバリエーションを試してみましたが、これを実現するにはどのような形式を使用する必要があるのか​​まだわかりません。

理論的には、WCF サービスに必要なのは適切にフォーマットされたメッセージだけであることがわかっています。私はメッセージを適切に構築することができません。通常、メッセージの送信方法について誰もがいくつかの提案を持っていますが、誰もが慣れているため、この状況で適切なメッセージ形式がどのようなものであるかについて実際の例を示している人をまだ見たことがありません。 .NET を使用してメッセージを送信すると、そのコンテキスト内ですべてが完了します。

役に立ちましたか?

解決

何も指定しません:サービスをどのようなバインディングとして公開していますか?WsHttpBinding または BasicHttpBinding を使用している場合、実行できる単純な「http ポスト」はありません。これは、少なくとも SOAP エンベロープ全体 (適切な SOAP バージョンと潜在的にセキュリティ ヘッダーなどを含む) を含める必要があるためです。

.NET 3.5 を使用している (または .NET 3.5 に移行できる) 場合、このようなシナリオをサポートするために明示的に作成された新しいバインディングがあります。サービスを SOAP サービスとしてではなく、完全に REST のようなサービスとして公開したい場合や、単に HTTP 経由の XML/JSON として。これは WebHttpBinding と呼ばれます。

調整できるオプションはたくさんありますが、webHttpBinding を使用して新しいエンドポイントを追加するだけで、ほぼすぐに機能するようになる可能性が非常に高いです。

これにより、新しいプログラミング モデルを有利にスタートできる可能性があります。 http://msdn.microsoft.com/en-us/library/bb412169.aspx

他のヒント

少し前に、XML ファイルを読み取り、内容を URL にポストして結果を保存する Excel マクロのコードを書きました。

Sub ExportToHTTPPOST()
Dim sURL, sExtraParams
Const ForReading = 1, ForWriting = 2, ForAppending = 3

Set rs = CreateObject("Scripting.FileSystemObject")
Set r = rs.OpenTextFile("y:\test.xml", ForReading)

Set Ws = CreateObject("Scripting.FileSystemObject")
Set w = Ws.OpenTextFile("Y:\test2.xml", ForWriting, True)

Do Until r.AtEndOfStream

    sData = sData & r.readline

Loop

sURL = "http://MyServer/MyWebApp.asp"

sData = "payload=" & sData

    Set objHTTP = New WinHttp.WinHttpRequest

            objHTTP.Open "POST", sURL, False
            objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
            objHTTP.send sData
            w.writeline objHTTP.ResponseText
    Set objHTTP = Nothing
    w.Close
    r.Close
End Sub

これは、ASP でバックグラウンド HTTP 投稿を行うための最も単純なコードです。

Set objXML = CreateObject("MSXML2.ServerXMLHTTP.6.0")
objXML.open "POST", url, false
objXML.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objXML.send("key="& Server.URLEncode(xmlvalue))
Set responseXML = objXML.responseXML
Set objXML = nothing

これには、サーバーに MSXML オブジェクトがインストールされていることが必要です。私はこれを、ASP の XML-RPC サーバー/クライアントを含むあらゆる種類のものに使用します。

編集:質問をもう一度読んで、その特定の方法に設定されている場合は役に立ちませんが、実際にWebサービスにアクセスする方法を探しているだけの場合は、投稿するXMLを正しく構築している限り、これは機能します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top