2009-11-05 19 views
0

我已經公開了一個Web服務上的方法來返回一個接口並使用[ServiceKnownType]屬性發送回合類,該屬性工作得很好。使接口結構出現在WSDL中

但是,wsdl描述不顯示任何它的屬性或這個接口的任何xml結構,當我發回List的時候,它給它一個默認的類型'ArrayOfAny'。我想要做的是將WSDL中的'ArrayOfAny'XML結構替換爲已知servicetype的結構。

我知道有一個接口'IWsdlExportExtension',可以實現訪問wsdl創建,並做了這個我不知道接下來要做什麼?

爲了讓WSDL'output message'xml節點具有實際發回的conrete類的xml結構,我需要執行什麼過程?

所以基本上,我只是想修改wsdl input_message xml節點與一些自定義內容?

任何想法?

回答

2

你不能這樣做。面向服務的世界及其WCF基於XML模式構建,您只能通過線路發送具體類型。請記住 - 客戶端和服務器之間的所有內容都是序列化的消息 - 沒有任何引用或任何內容的傳遞 - 只有具體的類可以被序列化爲消息。

你可以做什麼(在某種程度上)是定義一個基類,然後使用[KnownType]屬性聲明其他子代也可能被給定的操作接收和/或返回。

如果您控制通信通道的兩端(即.NET到.NET WCF),您唯一的希望就是NetDataContractSerializer,您可以使用它。

退房有關,這些文章:

的NetDataContractSerializer包.NET類型信息到您的序列化信息,從而使一些怪誕的情景是有規律的,可互操作服務實現無法處理。

更新: - 好的,我可能不太瞭解你的問題的要點 - 這裏的這篇文章A Sample IWsdlExportExtension for WCF幫助你也許?

+0

我不想定義接口,而是一個具體的類,但仍然保持接口作爲方法返回類型的靈活性。因此,如果我可以dynamicall注入知識類的結構該方法仍然是足夠動態 – Jon 2009-11-05 18:21:28

+0

我認爲你已經錯過了一點理解,我沒有接口部分的問題,我只是想修改wsdl input_message xml節點有一些自定義內容? – Jon 2009-11-05 18:38:37

+0

我知道你可以用一個自定義的WSDL導出器做幾件事,但我從來沒有見過像你正在尋找的東西...... – 2009-11-05 21:22:01