2011-09-29 70 views
0

我在.NET 4中使用C#,並試圖使用java web服務。我的代碼是通過添加.net 2.0樣式的webservice引用自動生成的。我相信這是與.NET是發送到java web服務類型的問題,這是我收到異常當我嘗試連接:.Net調用Java Webservice,我需要將XMLSchema/long轉換爲XMLSoap/long

Internal Server Error (deserialization error: deserialization error: unexpected element type: expected={http://schemas.xmlsoap.org/soap/encoding/}long, actual={http://www.w3.org/2001/XMLSchema}long) 

舊文件從WebService: 當序列化對象的SOAP消息,Microsoft .NET平臺將所有基元映射到W3C XML 模式類型。這與.NET平臺一起使用 編碼的RPC SOAP消息時,無法區分基元和原始包裝(通過自動裝箱),從而導致Sun One Web服務存在互操作性問題。 在Java編程語言中,原語和它們的等價對象包裝不能被自動裝箱 因此在語言中有所區別。 當Web服務在Sun One下生成和部署時,服務器端WSDL將Java原始圖映射到W3C模式類型,並將Java對象映射到SOAP模式類型。

有誰知道我可以告訴.net發送一個長而不是http://www.w3.org/2001/XMLSchema}長嗎?

謝謝! AFrieze

+0

你是如何在C#中編寫/獲取客戶端的?你是否自動生成它? wsdl是什麼樣的?它是doc風格還是rpc風格?給一些細節 – Bhaskar

+0

我添加了一些更多的細節Bhaskar ...希望它可以幫助! – AFrieze

回答

0

建議您嘗試將樣式更改爲Document。這樣,當您生成wsdl時,您會發現一個<type></type>部分列出了該服務使用的所有數據類型。本節還將有一個namespace元素,它本質上是導致現在問題的原因,但這並不明顯,因爲對於RPC服務類型,wsdl不包含類型的部分。我假設encodingliteral

編輯:

我應該先猜對了,但它似乎是你的服務使用encoded類型,而不是literal。關於編碼服務的一件事是它們總是容易出現互操作性問題。我的建議:不要使用rpc /編碼 - 使用文檔/文字。

+0

嗨Bhaskar,我正在查看生成的wsdl文件,我看到類型部分。拋出錯誤的變量的類型設置爲「soap-enc:long」,這應該是正確的。但是,.net調用該服務時,它不會發送長整型的soap版本。有什麼想法嗎? – AFrieze

+0

我也只是從web服務添加一些文檔到原來的問題,這可能會有所幫助。 – AFrieze

+0

@AFrieze,看我的編輯。 – Bhaskar