1

投稿を行うことは問題ではありません! 応答が得られるようにメッセージをフォーマットすることが問題です。

理想的には、メッセージを作成し、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 以外のものを使用して、ASP から XMLHTTP などの WCF サービスへのポストを実行することもできますが、WCF サービスが応答する XML メッセージを作成するという問題がまだ残っています。これのバリエーションを試してみましたが、これを実現するためにどのような形式を使用する必要があるかまだわかりません。

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

4

3 に答える 3

1

これは、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を構築して正しく投稿する限り、これは機能します.

于 2008-09-18T18:26:30.157 に答える
1

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

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

微調整できるオプションは多数ありますが、webHttpBinding を使用して新しいエンドポイントを追加するだけで、すぐに機能させることができる可能性が非常に高くなります。

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

于 2008-09-17T01:24:01.793 に答える
0

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
于 2008-09-16T21:08:10.143 に答える