我们有一个集中管理的对象模型,用于C#中的模式中的类型。 我们希望整个企业中的每个人都使用该对象模型,而不是在Web服务客户端或服务实现期间使用wsdl / svcutil每次生成的对象模型。
wsdl / svcutil是否有一个参数(任何其他方式)在执行期间不为模式类型生成类?
答案 0 :(得分:3)
我不知道任何特定的设置或命令行开关来强制执行此操作 - 您可以做什么,但这主要是通过检查来训练和执行,是共享类库(程序集,在DLL中) )与开发人员一起确保每个人都引用该公共类库,并单独在“添加服务引用”对话框(在“高级”页面)中保留默认设置:
alt text http://i45.tinypic.com/11b68sh.png
在这里,您定义WCF将重用它可以在任何引用的程序集中找到的任何类型 - 因此,如果您的开发人员添加对公共数据协定库的常规引用,那么WCF将使用这些类型而不是重新创建它们一遍又一遍。
但同样 - 这只是一种“通过示例管理并检查”的方法 - 我不知道有任何技术方法可以强制执行此操作。
答案 1 :(得分:3)
我相信你要找的是:svcutil.exe /r your-dtos.dll
/参考: - 指定的引用类型 部件。生成客户端时,请使用 此选项指定组件 可能包含代表的类型 正在导入元数据。 (短: / r)的
在我看来,WCF代理,端点通道,服务操作和dto有效负载紧密耦合到同一个生成的客户端代理是一个主要的设计缺陷。
这促使我在open web services framework中解决了解决终点和有效负载的问题:
在我的公司,我们已经开发了数百种不同客户端的Web服务,即Ajax,Flash / ActionScript,C ++,Silverlight,ASP.NET,并且能够通过不同的端点调用相同的Web服务,为我们节省了无数小时。
答案 2 :(得分:0)
如果从服务配置文件中删除mex端点,则客户端应用程序将无法发现并生成代理对象。
如果我正确理解您的问题,处理这种情况的方法是执行以下操作:
在这种方法中,你根本不使用wsdl.exe / svcutil.exe,因为你基本上绕过了wsdl。由于您手动管理连接,因此不添加服务引用。
编辑:按照这种方法,客户端仍然可以尝试通过wsdl.exe / svcutil.exe生成代理对象,但是他们无法从wsdl获取正确的信息。它们本质上会生成一个不起作用/不完整的代理。