2013-02-19 28 views
11

是我與是次優的工作情況班,所以忍耐一下..重用現有的從其他服務參考

我們消耗外部(非.NET)SOAP的Web服務
出於某種原因,每種方法單獨的Web服務實現與它的自己的WSDL
很多對象返回的web服務都有完全相同的設計,名稱和xml命名空間

添加服務引用」是因爲:
- 內部開發團隊已經習慣於這樣
- 我們想保留自動「更新服務引用」

第二屆參考添加了「所有引用程序集中的重用類型」選項。
所有類然而再次生成根據新的參考。

是其中一種方式來第一參考重用的類?

+0

你的意思是重用類像數據類?可能不會,因爲每個客戶端代理都在它自己的名稱空間中。如果您要共享公共數據對象,那麼您真正需要做的是手動編寫客戶端代理類或創建自己的客戶端代理生成器。 .NET確實使這種事情變得相當容易。你甚至可以利用像T4這樣的東西來幫助生成代碼。 – Pete 2013-02-19 14:13:39

+0

我的意思是數據類和手頭的問題是idd每個代理的名稱空間。我將如何去關於自己的客戶端代理生成器? – David 2013-02-19 14:18:20

+0

可能重複[svcutil exlude/reuse refrenced assemblies](http://stackoverflow.com/questions/8786096/svcutil-exlude-reuse-refrenced-assemblies)。你嘗試過'svcutil.exe/r'嗎? – jrummell 2013-02-19 14:18:24

回答

18

如果打開服務引用的Reference.svcmap(要找到它,請選中「顯示所有文件」並展開服務引用)並手動對其進行編輯,而不是通過GUI設置WSDL URI,則可以添加多個WSDL。例如。

<MetadataSources> 
    <MetadataSource Address="http://localhost/example1.wsdl" Protocol="http" SourceId="1" /> 
    <MetadataSource Address="http://localhost/example2.wsdl" Protocol="http" SourceId="2" /> 
    </MetadataSources> 

當你在一個服務引用多個WSDL文件,班會象你所說的再利用,只要他們在不同的WSDL相同。如果存在具有相同名稱但定義不同的類別,則其中一個名稱後面會加上'1'後綴。

+0

謝謝,正是我需要的! 具有相同名稱但不同定義的類的處理方式如下所示:ClassName,ClassName1。你會碰巧知道一種方法來控制後綴('eg'而不是'1')嗎? – David 2013-02-19 17:33:50

+0

您可能會嘗試編寫自己的客戶端代理生成器。當您找到以'1'結尾的課程時,請將其更改爲您喜歡的後綴。請參閱http://www.primordialcode.com/blog/post/silverlight-wcf-writing-custom-wcf-proxy-generator-support-validation作爲開始。 – 2013-02-19 18:27:44

+0

我在svcmap中的服務引用中只有1個WSDl,但它仍然生成一些具有1個後綴的屬性。可能是什麼原因?任何想法? – batmaci 2013-11-15 15:01:23