Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# 选择我们应该采用哪种类型的WCF代理生成路径?_C#_Wcf_Wcf Endpoint_Wcf Proxy - Fatal编程技术网

C# 选择我们应该采用哪种类型的WCF代理生成路径?

C# 选择我们应该采用哪种类型的WCF代理生成路径?,c#,wcf,wcf-endpoint,wcf-proxy,C#,Wcf,Wcf Endpoint,Wcf Proxy,我是WCF服务的新手。我知道三种生成代理的方法 使用服务引用 使用SvcUtil 使用ClientBase 但我不知道在哪种情况下我应该使用哪种类型。在我的情况下,我必须为我没有服务代码的第三方服务生成代理。我不想使用添加服务引用,因为它会给我以下问题。在这篇文章中提到。所以我想使用clientBase。但是我想如果不使用服务引用,我就不能使用它。我很困惑什么时候应该选择哪种代理 在我的情况下,我必须为我没有服务代码的第三方服务生成代理 我将有多个应用程序使用此服务 在这种情况下,最好使用svc

我是WCF服务的新手。我知道三种生成代理的方法

  • 使用服务引用
  • 使用SvcUtil
  • 使用ClientBase
  • 但我不知道在哪种情况下我应该使用哪种类型。在我的情况下,我必须为我没有服务代码的第三方服务生成代理。我不想使用添加服务引用,因为它会给我以下问题。在这篇文章中提到。所以我想使用clientBase。但是我想如果不使用服务引用,我就不能使用它。我很困惑什么时候应该选择哪种代理

    在我的情况下,我必须为我没有服务代码的第三方服务生成代理

    我将有多个应用程序使用此服务

    在这种情况下,最好使用svcuti,因为它可以生成一个库,您的所有项目都可以使用,即使它们是.NET库。生成后,您始终可以进入并调整它

    添加服务引用另一方面,对于单个.exe来说很好,但正如您所发现的,这对于多个应用程序来说很烦人,因为您需要重复该过程,并且最终会得到多个WCF类型定义,这只会增加维护

    只需确保将WCF客户端配置保留在应用程序的app.config中,而不是类库的app.config中(因为前者可能无法读取)

    如果您的供应商遵循了“”,那么您的生活就会更轻松


    然而,SOAP纯粹主义者会争辩说,供应商提供的唯一东西是SOAP WSDL XML文件,无论如何,您都需要从该文件生成类型。(遗憾的是,.NET中的默认行为是背对背的)

    我们不向您的库项目添加服务引用,只向您的应用程序添加服务引用。在这种情况下,我必须在多个位置添加服务引用,因为我将有多个应用程序使用此服务。我认为这不是一个好办法。啊,我没有意识到,请看下面我的答案。只有我是服务的所有者,才能使用客户端。正确吗?嗯,您通常需要服务接口类型,除非供应商提供,否则您只需使用在客户端代理生成过程中生成的服务接口类型,到那时已经太晚了。您也可以使用已建立的代码。如果供应商以.NET客户端库的形式向您提供API,您可以使用
    ClientBase
    及其提供的接口创建自己的代理。但听起来他们并没有这么做。为了回答您的问题,任何人都可以使用
    ClientBase
    ,但您首先需要服务合约在使用svcuti生成代理后,我仍然得到“合约”属性无效-值“xxx”根据其数据类型“clientContractType”无效-枚举约束失败。@TBAG。为什么不把这当作一个新问题来问呢。你上面的问题更多的是关于最佳实践,而后者更多的是关于一个特定的问题