如何格式化用于执行从VBScript / ASP到WCF服务的HTTP帖子的消息并获得响应?

时间:2008-09-16 20:51:36

标签: wcf asp-classic vbscript

做这个帖子不是问题!格式化消息以便我得到响应是问题。

理想情况下,我可以构造一条消息并使用WinHTTP来执行WCF服务(在IIS中托管)并获得响应,但到目前为止,我一直无法构建一些正常工作的东西。 / p>

有没有人有这么简单的例子呢?

在2.0 Web Service世界中,这就像在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发送消息,并在这种情况下为您完成所有操作。

3 个答案:

答案 0 :(得分:1)

您没有指定一件事:您将服务暴露给什么绑定?如果您正在使用WsHttpBinding或BasicHttpBinding,那么您可以执行简单的“http post”,因为您需要至少包含整个SOAP信封(使用正确的SOAP版本和可能的安全标头等等)。 / p>

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

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

这可能会让您对新的编程模型有所了解:http://msdn.microsoft.com/en-us/library/bb412169.aspx

答案 1 :(得分:0)

前一段时间我为excel宏编写了一些代码,该宏读取XML文件,将内容发布到URL然后保存结果。

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

答案 2 :(得分:0)

这是我在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,这将起作用发布正确。