2015-04-28 49 views
2

我正在使用第三方服務,它的WSDL定義了一個名爲System的類。使用添加服務引用,Visual Studio會生成一個名爲System的類的代理,這會導致各種編譯問題。生成的WSDL代理具有名爲「System」的類

我正在尋找避免此問題而不違反合同的最佳方法。

我試着修改Reference.cs,但是我搞砸了序列化。另外,由於每次有人更新服務引用時都會更改此文件,因此這不是一個好的長期解決方案。

我很好奇,如果有人遇到過這樣的問題,以及如何最好地解決它。

的複雜類型如下:

<xsd:complexType name="System"> 
    <xsd:all> 
    <xsd:element name="timer_frequency" type="xsd:string"/> 
    <xsd:element name="acceptable_timer" type="xsd:string"/> 
    <xsd:element name="fail_instructions" type="xsd:string"/> 
    <xsd:element name="dispatch_instructions" type="xsd:string"/> 
    <xsd:element name="system_descr" type="xsd:string"/> 
    </xsd:all> 
</xsd:complexType> 
+0

您是否嘗試過在不同的命名空間中生成類型?請參閱https://msdn.microsoft.com/en-us/library/7h3ystb6%28VS.80%29.aspx –

+0

中的/ namespace選項@EugeneOsovetsky:您是否意識到您指向WSDL.EXE的.NET 2.0頁面,我們甚至不知道他是否在使用那個過時的工具? –

+0

您使用哪種「導入工具」?您應該先嚐試使用「添加服務參考」。如果這不起作用,那麼嘗試「svcutil.exe」。 –

回答

2

這個問題的最終解決方案涉及生成服務引用(我選擇通過svcutil.exe這樣做),然後手動修改System類以調用別的東西(我選擇了Sys)。我還必須更改SoapTypeAttribute以包含TypeName="System"

然後,每當他們更新他們的API時,我都要重新做一遍。不是很好,但讓事情有效。

1

而是在你的問題的工作,你應該有你的服務命名空間變更爲「系統」別的東西等。

當你添加服務引用時,你可以選擇提供你想要的命名空間,但是使用的系統會自動添加到頂端,這將會使事情搞砸。如果服務無法修改,我想你應該避免添加引用並手動生成代理,修改它並添加到項目中。

+0

服務名稱空間不是System。服務定義的類之一是。 – aethercowboy