2009-12-03 15 views
2

在C#(其他.Net OOP語言)中,我有2個webservices。 Svc1返回一個複雜的數據類型,它成爲svc2的參數。請注意,它是相同的複雜類型。從2個webservices中複製一個複製類型

現在,我創建這2個webservices的2個代理類。這意味着相同的類型會生成兩次。

如何確保在2個代理服務器中只有該類型的一個副本?您可以假設2個Web服務的相同或不同名稱空間。

回答

1

產生在同一時間兩個代理:

svcutil http://example.com/svc1?wsdl http://example.com/svc2?wsdl 

如果類型是真的在這兩個服務將只產生客戶端的單一代理類相同(名稱和命名空間)。

又一種可能性是生成用於所述第一服務的代理類:

svcutil http://example.com/svc1?wsdl 

編譯生成.cs文件成組件例如MyAssembly.dll和導入所述第二服務時使用/reference選項:

svcutil /reference:MyAssembly.dll http://example.com/svc2?wsdl 

這將在WSDL和提供的程序集中查找相同的類型。

+0

整齊。將嘗試這兩種方法。感謝Darin。 – 2009-12-03 18:09:09

+0

好奇雖然..萬一web服務是在不同的命名空間,什麼是最好的方法來實現相同? – 2009-12-03 18:13:50

+0

如果不同的名稱空間不能達到相同的效果。您需要手動繞制生成的代理。 – 2009-12-03 18:16:55

0

我最近碰到類似的問題;我沒有嘗試Darin的建議。

Miguel Castro的IDesign在2009年3月的DevConnections上展示了「WCF手動方式......正確的方式」。在那裏他展示瞭如何重用服務合同和代理。從我的筆記:

  • 一個用於服務組件/數據契約
    • 共享客戶端&服務器之間
  • 一個組件,用於服務
    • 允許更改主機和重用
  • 一個組件,用於代理 客戶之間
    • 重用
  • 獨立應用程序託管
  • 不要使用「添加服務引用」
  • 服務(POCO)項目引用的合同(接口)項目和系統。ServiceModel
  • 客戶端代理組件的參考合同組裝,但服務項目
  • 客戶端應用程序實例化代理

我們公司還沒有轉會到WCF還沒有,但是這看起來像的路要走(對我來說)。

編輯:我在這發現了一個article by Mr. Castro