2012-02-13 125 views
4

我最近的任务是将经典的ASP Web应用程序升级到C#。一切都很好,除了有一些代码使用Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")。我甚至不知道这是什么,除非我有一般的想法,即它被用来以某种方式通过HTTPS调用Web服务。如何将使用Msxml2.ServerXMLHTTP.3.0的VBScript应用程序升级到C#?

的代码看起来是这样的:

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

您可能有兴趣知道该语言被命名为“C#”,而不是“C#.NET”。 – 2012-02-13 22:25:55

回答

3

这是做一个SOAP请求的Web服务。

您的等效功能是HttpWebRequest,但.NET中的Web服务是一项完整的功能。我不打扰创建XML并处理响应。

如果您使用的是.NET 3.0或更高版本;您可以使用Windows Communication Foundation(WCF)至add a service reference。该链接为如何做到这一点提供了充足的指示。一旦添加了服务引用,就可以使用纯C#调用服务的方法。您只需将其指向包含该服务的WSDL的URL即可。

如果您使用的是.NET 2.0,那么您也可以使用Web References,它也适用于SOAP。

+0

我对WCF很熟悉。如果WCF可以替换这个代码,那么这听起来就像是这个工作的正确工具。 – 2012-02-14 17:11:07

2

如果它只有1:1左右的转换,则可以简单地使用WebRequest实例来获取数据并手动评估它们。这就是旧代码似乎要做的事情。

为了得到web服务描述('wsdl'文件),将其导入并使用VS为您自动创建的代理类自动从wsdl中导出。

VS:项目 - > 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

+0

这绝对不是关于1:1转换。对于这个应用程序,我们使用MVC 3和实体框架,它们在传统的ASP中没有模拟。只是当我遇到这个特定的代码块时,我认为在这里询问它可能会更容易,以便自己弄清楚:-) – 2012-02-13 22:01:44

+0

最好的方法是使用真正的Web服务引用。我会添加一些链接到我的答案。 – 2012-02-13 22:09:39

+0

-1:除非没有选择,否则他不应该使用Web引用。这使用传统的ASMX技术,不应在新开发中使用。 – 2012-02-14 03:19:51