我们为 C# 架构中的类型提供了一个集中管理的对象模型。我们希望整个企业中的每个人都使用该对象模型,而不是在 Web 服务客户端或服务实现期间使用每次从 wsdl/svcutil 生成的对象模型。
wsdl/svcutil 是否有一个参数(任何其他方式)在执行期间不为模式类型生成类?
我们为 C# 架构中的类型提供了一个集中管理的对象模型。我们希望整个企业中的每个人都使用该对象模型,而不是在 Web 服务客户端或服务实现期间使用每次从 wsdl/svcutil 生成的对象模型。
wsdl/svcutil 是否有一个参数(任何其他方式)在执行期间不为模式类型生成类?
我相信您正在寻找的是:svcutil.exe /r your-dtos.dll
/reference: - 指定程序集中的引用类型。生成客户端时,使用此选项指定可能包含表示正在导入的元数据的类型的程序集。(简称:/r)
在我看来,将 WCF 代理、端点通道、服务操作和 dto 有效负载紧密耦合到同一个生成的客户端代理中是一个主要的设计缺陷。
这就是促使我在我的开放式 Web 服务框架中解决问题的原因,在该框架中我解耦了端点和有效负载,它允许:
在我的公司,我们开发了数百个 Web 服务,由许多不同的客户端调用,例如 Ajax、Flash/ActionScript、C++、Silverlight、ASP.NET,并且能够通过不同的端点调用相同的 Web 服务为我们节省了无数时间。
如果您从服务配置文件中删除 mex 端点,客户端应用程序将无法发现和生成代理对象。
如果我正确理解您的问题,处理这种情况的一种方法是执行以下操作:
在这种方法中,您根本不使用 wsdl.exe/svcutil.exe,因为您实际上是在绕过 wsdl。您也无需添加服务引用,因为您是手动管理连接。
编辑:按照这种方法,客户端仍然可以尝试通过 wsdl.exe/svcutil.exe 生成代理对象,但他们不会从 wsdl 获得正确的信息。他们基本上会生成一个不起作用/不完整的代理。