如何将使用Msxml2.ServerXMLHTTP.3.0的VBScript应用程序升级到C#?

时间:2012-02-13 21:54:16

标签: c# web-services asp-classic vbscript

我最近的任务是将经典的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#

2 个答案:

答案 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