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 到 WCF 服务(如 XMLHTTP)的发布,但我仍然存在构建 WCF 服务将响应的 XML 消息的问题。我已经对此进行了尝试,但仍然无法理解我需要使用哪种格式来实现这一点。

从理论上讲,我知道所有 WCF 服务需要的是格式正确的消息。我只是无法正确构建消息,通常虽然每个人都对如何发送消息有一些建议,但我还没有看到有人给出一个实际示例来说明在这种情况下正确的消息格式是什么,因为每个人都习惯于使用 .NET 发送消息,在这种情况下一切都已为您完成。

4

3 回答 3

1

您没有指定一件事:您将服务公开为什么绑定?如果您使用的是 WsHttpBinding 或 BasicHttpBinding,那么就没有简单的“http post”可以做,因为您至少需要包含整个 SOAP 信封(带有正确的 SOAP 版本和潜在的安全标头等)。

如果您正在使用(或可以迁移到).NET 3.5,那么有一个明确创建的新绑定来支持这样的场景,您希望您的服务不是作为 SOAP 服务而是作为完全类似 REST 的服务公开,或者就像基于 HTTP 的 XML/JSON 一样。它被称为 WebHttpBinding。

您可以调整许多选项,但很有可能您可以使用 webHttpBinding 添加一个新端点,并且几乎可以立即使用。

这可能会让您在新的编程模型上领先一步:http: //msdn.microsoft.com/en-us/library/bb412169.aspx

于 2008-09-17T01:24:01.793 回答
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 服务器/客户端。

编辑:重新阅读您的问题,如果您以特定方式设置,那么这将无济于事,但如果您真的只是在寻找一种访问网络服务的方法,只要您构建 XML 以正确发布,这将起作用.

于 2008-09-18T18:26:30.157 回答
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 回答