這似乎是一個基本的Web服務問題。然而,基於我已經能夠做的一些研究,一個優雅的解決方案是難以捉摸的。我想我在這裏丟失的東西調用Java Web服務的WCF客戶端:XmlSerializer找不到派生類型
我正在使用WCF客戶端連接到我無法控制的外部Web服務。外部WS是基於Java的。有一些程序集提供來調用Web服務中的方法。這些程序集具有基類和派生類。 Web服務方法可以將Base類作爲參數,而從WCF客戶端實例化Derived類並將其傳遞給方法。
爲了模擬這個場景,我創建了一個帶有一個ClassLibrary的小項目,它具有一個BaseClass和一個DerivedClass類型的方法。
然後我創建一個asmx web服務並在其中添加一個HelloWorld方法。我添加了對ClassLibrary的引用。這個方法需要一個BaseClass類型參數。
然後,我創建一個服務引用到ASMX Web服務。在代理類中,如果該方法已經不存在,我將向該方法添加一個XmlSerializerFormatAttribute。
從WCF客戶端,我調用ASMX web方法
BaseClass的BC =新的派生();
ServiceReference1.TestService ts = new WCFTest.ServiceReference1.TestService();
lbl1.Text =(c1.HelloWorld(bc));
調用失敗,錯誤 類型ClassLib.Derived不是預期的。使用XmlInclude或SoapInclude屬性指定靜態未知的類型。
我可以調用此Web服務方法的唯一方法是將XmlInclude屬性添加到ClassLibrary中的BaseClass。 在我的場景中,這個庫是一個由外部供應商提供的DLL。我無法將屬性添加到其類中。我看過DataContractSerializer和KnownTypes和XmlSerializer ctor。但是這些解決方案似乎不適用於我的情況。
我該如何讓XMLSerializer查看我在WCF客戶端中引用的程序集中的派生類?有沒有優雅的解決方案?
感謝, 下襬
我會看看這些選項。謝謝 – Hem