2009-06-25 52 views
1

我有一個自我託管的基於TCP的WCF服務。我現在正在構建一個消耗該服務的項目,但似乎至少有兩種方法可以爲項目添加服務引用,並且這兩種方法都會生成截然不同的代理。首先,我使用了項目菜單中的「添加服務引用」,但是這生成了相當多的文件,甚至是核心.Net類型的一些XML模式。然後,我嘗試了只生成兩個文件,一個代理和一個配置文件,其中包含服務參考和綁定參數的SvcUtil,這是好得多,但...創建WCF服務引用的正確方法?

在這兩種情況下,VS工具似乎重現了類型定義儘管我已經提供了包含該服務及其使用的所有類型的程序集的引用。例如,我的一些服務方法返回實體類的泛型集合。所有的實體類都是在我從消費項目直接引用的程序集中定義的,所以爲什麼要重新定義這些類型呢?

如果有些機構可以提供一些關於使用WCF服務返回Entity類型和任何最佳實踐的建議,我將不勝感激。

回答

2

我們發現添加服務引用會創建大量不需要的代碼,這些代碼的獲取方式不僅僅是幫助。

我們已經走了過來,以設置它的手動方式,有一個介紹,這個方法在這裏:

http://perseus.franklins.net/dnrtvplayer/player.aspx?ShowNum=0103

+1

是 - 但是 - 即*僅*以往​​的作品中,你控制*通信的雙向*端,並使用.NET和WCF兩端的場景。如果是這種情況 - 這樣做的好方法!但請記住 - 這是「真實世界」中非常有限的情景。 – 2009-06-25 14:31:47

2

是的,在你的具體情況下,這似乎是重複 - 但考慮到這:WCF也被設計爲可互操作,並且在大多數情況下,尤其是如果您有一個非.NET客戶端調用您的代碼時,您將不具有合約和可用接口的程序集。

所以沒有什麼,但創建一個完整的代理,其中包含所有的信息,以便在所有可能的情況下工作。

現在,如果你真的想避免重複數據合約等,你可以將它們編譯成它們自己的程序集,然後在調用svcutil時使用/ r:(程序集名稱)開關來告訴它重新使用代碼和合同在該大會。

馬克