Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wsdl.exe/svcutil.exe-在Web服务或客户端生成期间,是否有方法不为XSD中的类型生成类_C#_Wsdl.exe_Svcutil.exe - Fatal编程技术网

C# wsdl.exe/svcutil.exe-在Web服务或客户端生成期间,是否有方法不为XSD中的类型生成类

C# wsdl.exe/svcutil.exe-在Web服务或客户端生成期间,是否有方法不为XSD中的类型生成类,c#,wsdl.exe,svcutil.exe,C#,Wsdl.exe,Svcutil.exe,对于C#模式中的类型,我们有一个集中管理的对象模型。 我们希望整个企业中的每个人都使用该对象模型,而不是在webservice客户端或服务实现期间使用每次从wsdl/svcutil生成的对象模型 wsdl/svcutil是否有参数(任何其他方式)在IE执行期间不为架构类型生成类?如果从服务配置文件中删除mex端点,客户端应用程序将无法发现和生成代理对象 如果我正确理解您的问题,处理这种情况的方法是执行以下操作: 创建一组具有服务和datacontracts/共享对象模型的公共DLL 使用公共dl

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


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

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

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

  • 创建一组具有服务和datacontracts/共享对象模型的公共DLL
  • 使用公共dll中的契约而不是visual studio在创建新服务时创建的契约来创建服务
  • 从服务器配置文件中删除MEX端点(这将实质上中断代理生成)
  • 让您的客户端使用公共dll并在客户端手动创建通道(通过通道工厂等)
  • 在这种方法中,您根本不使用wsdl.exe/svcutil.exe,因为您实际上是在绕过wsdl。您也不添加服务引用,因为您正在手动管理连接


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

    我不知道有任何特定的设置或命令行开关来实现这一点-您可以做什么,但主要是通过检查来进行培训和实施,即与开发人员共享类库(DLL中的程序集),并确保每个人都引用该公共类库,并将默认设置单独保留在“添加服务引用”对话框(在“高级”页面上):

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


    但是再一次——这只是一种“示例管理和检查”的方法——我不知道有什么技术方法可以实现这一点。

    我相信你想要的是:
    svcutil.exe/r你的dtos.dll

    /参考:- 指定类型中的引用类型 装配生成客户端时,请使用 此选项用于指定 可能包含表示 正在导入元数据。(简称: /(r)

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

    这就是促使我在我的研究中解决的问题,我将端点和有效载荷解耦,从而允许:

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

    在我的公司,我们开发了数百个Web服务,这些服务由许多不同的客户机调用,即Ajax、Flash、ActionScript、C++、Silverlight、ASP.NET,并且能够通过不同的端点调用同一个Web服务,这为我们节省了无数的时间。我有一个导入一些XSD的wsdl,我想从命令提示符下使用wsdl.exe或svcutil.exe生成服务接口。在执行wsdl.exe/svcutil.exe期间,我是否可以控制不为XSD中的类型生成类?wsdl存在的部分原因是定义与它们通信所需的对象模式。wsdl.exe和svcutil.exe是为这些对象生成类而设计的,我认为没有办法阻止它。Jeremy,如果客户端不知道如何与服务通信,这是真的。如果开发人员可以访问实际的契约DLL,那么他们根本不需要WSDL。他们使用相同的DLL就合同达成一致。