我最近的任务是将经典的ASP Web应用程序升级到C#。一切都很好,除了有一些代码使用Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
。我甚至不知道这是什么,除了我有一般的想法,它被用来通过HTTPS以某种方式调用Web服务。
代码如下所示:
Dim strSOAPEnvelope
strSOAPEnvelope = "<?xml version='1.0' encoding='utf-8'?>" & _
"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>" & _
"<soap:Body>..........</soap:Body>" & _
"</soap:Envelope>"
oXMLHttp.Open "POST", "https://example.com/service.asmx", False
oXMLHttp.setRequestHeader "Content-Type", "text/xml"
oXMLHttp.setOption 2, 13056
oXMLHttp.setRequestHeader "Connection", "close"
oXMLHttp.setRequestHeader "SOAPAction", "https://example.com" & strfunction
我认为我理解这是通过HTTPS与Web服务进行通信的一般概念。如何将此代码升级到C#
答案 0 :(得分:3)
这是对Web服务的SOAP请求。
与您相同的功能是HttpWebRequest
,但.NET中的Web服务是一个完整的功能。我不打算创建XML并处理响应。
如果您使用的是.NET 3.0或更高版本;您可以使用Windows Communication Foundation(WCF)到add a service reference。该链接提供了有关如何执行此操作的充分说明。添加服务引用后,可以使用普通C#调用服务的方法。您需要做的就是将其指向包含服务的WSDL的URL。
如果您使用的是.NET 2.0,则可以使用适用于SOAP的Web References。
答案 1 :(得分:2)
如果只进行大约1:1的转换,您可以简单地使用WebRequest实例来获取数据并手动评估它们。这就是旧代码似乎做的事情。
更精细,推荐和简单的方法是获取Web服务描述(&#39; wsdl&#39;文件),导入它并使用VS为wsdl自动创建的代理类。
VS:项目 - &gt; AddWebreference - 输入服务URL(https://example.com/service.asmx)
如果一切顺利,就像为项目添加对托管程序集的引用一样简单。 VS甚至会跟踪服务的更新。
有关该主题的概述:http://msdn.microsoft.com/en-us/library/bb907578.aspx
假设您使用的是VS:http://msdn.microsoft.com/en-us/library/tydxdyw9.aspx