2009-10-02 77 views
2

我打電話給別人的Web服務,他們提供了一個WSDL文件和一堆XSD文件。我使用本地WSDL文件在我的項目中創建了Web引用,並使用xsd.exe創建了一個類。 Web方法我打電話是調用Web服務的問題 - 使用XmlInclude或SoapInclude屬性

object MyService.MyMethod(object myObj) 

所以我創造我服務的一個新實例並通過XSD創建了對象的新實例。 Web服務文檔告訴我,myObj的類型爲ObjectRQ(由xsd創建)。

我的代碼是這樣的:

MyService service = new MyService(); 

ObjectRQ request = new ObjectRQ(); 

// Set the values of request. 

object result = service.MyMethod(request); 

該代碼的最後一行我得到一個錯誤:

The type ObjectRQ was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.

我不知道什麼可能會造成這個錯誤,我的搜索沒有產生任何幫助。誰能幫我這個?

+0

在WSDL中,您正在調用的操作使用的消息的類型是什麼?你能發佈那部分WSDL嗎? – 2009-10-03 17:16:30

回答

1

由於代理中的參數類型是對象,組成消息的XmlSerializer並不知道ObjectRQ類型。在這個意義上,這是意想不到的所以基本上你需要做的就是讓XmlSerializer知道這種類型的方式。 一種方法是XmlInclude屬性。另一種方法是將類型添加到代理類操作的已知類型中。在數據合約中,您可以使用KnownType屬性來完成此操作,但由於您只能控制客戶端,因此您必須自己在代碼中執行此操作。 你可以找到關於它here的博客文章。

HTH。

+0

看起來這是正確的,不幸的是,對於我來說WSDL文件還有很多其他問題沒有創建一個我剛放棄並直接HTTP的下降代理。謝謝,你的回答已經死了。 – Odd 2009-10-06 06:40:13

+0

我感謝您的評論。對不起,在這裏你不能使用我的答案。 – 2009-10-06 10:18:35