2012-02-13 127 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