我们不是通过 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 命名空间(请参阅星号的含义)
该过程设置起来有些麻烦,因为您必须手工制作批处理文件,但是一旦完成,它就会运行良好。