我使用Visual Studio 2010生成的webservice代理類從我的.net 2.0客戶端訪問Web服務。c#代理類用於測試和生產Web服務
這工作得很好,但我的問題是,web服務有一個測試系統的wsdl和生產系統的wsdl。
儘管webservices在結構上完全相同,但它們的xml名稱空間並不是。
在我的代碼中,我可以設置web服務的服務URL和通信工作(我使用TraceExtension將SOAP消息轉儲到日誌文件),但是當涉及到反序列化時,我會遇到異常。
我認爲這是因爲我生成代理類與來自測試系統的WSDL文件,這增加了一些屬性是這樣的: [System.Xml.Serialization.SoapTypeAttribute(命名空間=「TestService的URL這裏」)]
我當然可以複製我的項目並在生產服務中添加一個web參考,但是這會複製我的代碼,我將不得不在將來對兩個項目進行任何進一步的更改,當然這很容易出錯。
這裏是調用依據測試系統服務的登錄,方法的工作響應:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://TEST_SERVER_NAME/ProjectService">
<SOAP-ENV:Body>
<ns1:loginResponse xmlns:ns1="http://TEST_SERVER_NAME/ProjectService">
<login_result xsi:type="tns:LoginResult">
<errorcode xsi:type="xsd:integer">0</errorcode>
<errortext xsi:type="xsd:string">Successfully logged in</errortext>
<logincode xsi:type="xsd:string">wF3N5vdPsueL0aYlp41i6B8VTZEJztqx</logincode>
</login_result>
</ns1:loginResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
這裏是從生產web服務相同的反應:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://PRODUCTION_SERVER_NAME/ProjectService">
<SOAP-ENV:Body>
<ns1:loginResponse xmlns:ns1="http://TEST_SERVER_NAME/ProjectService">
<login_result xsi:type="tns:LoginResult">
<errorcode xsi:type="xsd:integer">0</errorcode>
<errortext xsi:type="xsd:string">Successfully logged in</errortext>
<logincode xsi:type="xsd:string">wOmdlZMkIXVL4H8uTGU69hgpNsK1Cz3Q</logincode>
</login_result>
</ns1:loginResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
正如你所看到的,這兩個響應只在xmlns:tns屬性上有所不同,而xmlns:ns1屬性始終爲http://TEST_SERVER_NAME/ProjectService
(我想這是來自生成的代理類和測試系統的WSDL)。 logincode只是一個認證令牌,並且會始終不同,所以沒關係。
有沒有其他解決方案來解決這個問題?
解決此問題的運氣如何? – user324365 2012-08-29 11:13:09