代码之家  ›  专栏  ›  技术社区  ›  Harv

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

  •  1
  • Harv  · 技术社区  · 16 年前

    理想情况下,我能够构造一条消息,并使用WinHTTP执行到WCF服务(托管在IIS中)的post并获得响应,但到目前为止,我还无法构造正常工作的东西。

    有没有人举过这样一个简单的例子?

    在2.0 Web服务世界中,这就像在Web.config中放置一个设置以使服务响应post一样简单,然后使用正确的参数调用适当的Web方法。在WCF世界中似乎没有类似的情况。

    假设在这一点上,在端点处,我可以转换为使用任何可用的绑定,直到.NET 3.5中支持的绑定,但同时,如果可以使用WsHttpBinding或BasicHttpBinding来实现,那么正确的答案是描述如何在VBScript上下文中为这些绑定中的任何一个设置消息的格式,或者如果无法实现,那么只需说,您不能这样做。如果可以使用WebHTTPBinding实现这一点,那么我还没有找到实现这一点的方法,因为我已经研究了WebInvoke属性,并且无法创建一个从VBScript到WCF的测试,该测试工作正常。

    假设发布的数据类型是字符串,响应也是字符串。

    虽然我可以使用WinHTTP以外的东西来执行从ASP到WCF服务(如XMLHTTP)的post,但我仍然存在构建WCF服务将响应的XML消息的问题。我已经尝试过这方面的变化,但仍然无法理解我需要使用什么样的格式来实现这一点。

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

    3 回复  |  直到 15 年前
        1
  •  1
  •   tomasr    16 年前

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

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

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

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

        2
  •  1
  •   Skyhigh    16 年前

    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来发布,这将起作用。

        3
  •  0
  •   Spike    16 年前

    不久前,我为一个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