繁体   English   中英

wsdl.exe / svcutil.exe - 有没有办法在Web服务或客户端生成期间不为xsds中的类型生成类

[英]wsdl.exe/svcutil.exe - is there a way not to generate the classes for types in the xsds during a Web service or client generation

我们有一个集中管理的对象模型,用于C#中的模式中的类型。 我们希望整个企业中的每个人都使用该对象模型,而不是在web服务客户端或服务实现期间使用每次从wsdl / svcutil生成的对象模型。

wsdl / svcutil是否有一个参数(任何其他方式)在执行期间不为模式类型生成类?

我不知道任何特定的设置或命令行开关来强制执行此操作 - 你可以做什么,但这主要是通过检查训练和执行的问题,是与类共享类库(程序集,在DLL中)开发人员,并确保每个人都引用该公共类库,并在“添加服务引用”对话框(在“高级”页面)中单独保留默认设置:

替代文字

在这里,您定义WCF将重用它可以在任何引用的程序集中找到的任何类型 - 因此,如果您的开发人员添加对公共数据协定库的常规引用,那么WCF将使用这些类型而不是一遍又一遍地重新创建它们再次。

但同样 - 这只是一个“通过示例管理和检查”的方法 - 我不知道任何技术方法来强制执行此操作。

我相信你要找的是: svcutil.exe /r your-dtos.dll

/ reference: - 指定程序集中的引用类型。 生成客户端时,使用此选项指定可能包含表示要导入的元数据的类型的程序集。 (简称:/ r)

在我看来,WCF代理,端点通道,服务操作和dto有效负载紧密耦合到同一个生成的客户端代理是一个主要的设计缺陷。

这就是我在开放式Web服务框架中解决的问题,在这个框架中 ,我解耦了端点和有效负载,它允许:

  • 相同的Web服务客户端(即Soap11,Soap12,XML,JSON)能够调用任何Web服务。
  • 它还允许我在任何Web服务客户端中使用相同的DataContract dto实例
  • 这有许多好处,包括能够在多个不同端点上公开相同的Web服务而无需任何额外配置。 从而为我的服务的每个消费者提供优化的Web服务端点。 例如
    • 用于互操作性和强类型客户端的XML,
    • 适用于Ajax客户端的JSON,
    • WSDL适用于喜欢生成代码的环境(即Flex Builder,VS.NET'添加服务引用'等)

在我的公司,我们已经开发了数百个由多个不同客户端调用的Web服务,即Ajax,Flash / ActionScript,C ++,Silverlight,ASP.NET,并且能够通过不同的端点调用相同的Web服务,为我们节省了无数个小时。

如果从服务配置文件中删除mex端点,则客户端应用程序将无法发现并生成代理对象。

如果我正确理解您的问题,处理这种情况的方法是执行以下操作:

  1. 创建一组具有服务和数据对象/共享对象模型的公共DLL。
  2. 使用common dll中的契约创建服务,而不是在创建新服务时Visual Studio创建的契约。
  3. 从服务器配置文件中删除MEX端点(这将基本上破坏代理生成)。
  4. 让您的客户使用公共dll并在客户端手动创建通道(通过渠道工厂等...)。

在这种方法中,您根本不使用wsdl.exe / svcutil.exe,因为您基本上绕过了wsdl。 由于您手动管理连接,因此不添加服务引用。

编辑:按照这种方法,客户端仍然可以尝试通过wsdl.exe / svcutil.exe生成代理对象,但他们无法从wsdl获取正确的信息。 它们本质上会生成一个不起作用/不完整的代理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM