如何将用于从VBScript/ASP执行HTTP POST的消息格式化为WCF服务并获得响应?
做贴子不是问题!格式化消息以便我得到响应是问题。如何将用于从VBScript/ASP执行HTTP POST的消息格式化为WCF服务并获得响应?
理想情况下,我可以构造一个消息并使用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发送消息,在这种情况下完成这一切。
您没有指定一件事:您将您的服务暴露给哪些人?如果您使用的是WsHttpBinding或BasicHttpBinding,那么您可以执行简单的“http post”,因为您至少需要包含整个SOAP信封(使用正确的SOAP版本和潜在的安全性标头等)。
如果您正在使用(或可以迁移到).NET 3.5,则会显式创建一个新的绑定来支持这样的场景,您希望您的服务不作为SOAP服务公开,而是完全基于REST-比如服务,或者简单地称为XML/JSON over HTTP。它被称为WebHttpBinding。
有很多选项可以调整,但很可能你可能只需要使用webHttpBinding添加一个新的端点并且几乎可以马上工作。
这可能给你的新的编程模型中的头开始:http://msdn.microsoft.com/en-us/library/bb412169.aspx
前段时间我为一个读取XML文件的Excel宏写了一些代码,将内容贴到一个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
这是我有在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要正确发布。
我从来没有找到一个特别好的方法来做到这一点,并最终回到使用普通的旧Web服务,而不是WCF。 – Harv 2009-05-26 18:39:49