我們不是通過Visual Studio助手生成我們的服務代理,而是通過自定義批處理文件調用slsvcutil.exe(因爲我們使用Silverlight)。在那裏,你可以使用/ N參數像這樣指定一個命名空間映射:
"C:\Program Files (x86)\Microsoft SDKs\Silverlight\v5.0\tools\slsvcutil.exe "^
http://ServiceUrl/MyService.svc^
**/n:http://youruri.org/CustomerService/DataContracts,CLR.Namespace.CustomerService^**
/n:*,CLR.Namepsace.MyService^
/r:"%ProgramFilesFolder%\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\System.Windows.dll"^
/ct:System.Collections.ObjectModel.ObservableCollection`1^
/edb^
所以具有命名空間http://youruri.org/CustomerService/DataContracts
所有數據合同產生的代理文件等的CLR命名空間CLR.Namespace.CustomerService。假設你已經在相同的代理程序集中預先生成了這個代理,你可以將這個整個命名空間從你的第二個文件中刪除,並且一切正常 - 我們爲最後一步寫了一個小工具。所有其他契約名稱空間將生成到CLR.Namepsace.MyService namspace(請參閱星號意思是全部)
該過程是一些需要設置的hazzle,因爲您必須手工製作批處理文件,但一旦完成它運作良好。
我遇到同樣的問題。我試圖使用下面的文章中的建議,但沒有喜悅。但是,我使用的是WCF RESTful服務(這可能與下面的方法不起作用有關),所以我最終引用了一個包含我的數據合同的常見DLL,並且將所有服務引用都放在一起。由於我使用簡單的HTTP Web請求調用我的服務,因此實際上並不需要項目中的服務引用。 – Nick 2012-02-27 23:08:00