Web.Config中的服务与客户端节点/部分

时间:2014-07-04 23:11:34

标签: wcf

配置部分中的服务节点/部分与客户端节点/部分之间有什么区别?为什么在一个部分中配置端点而不是另一个部分?哪种互操作性最好?

我目前正在构建一个与另一个服务进行通信的服务。我有我的客户端点和其他服务的端点。 Visual Studio似乎将所有端点都归入Client节。

我认为客户端节点是供您消费的,服务节点是用于生产的。但是当您创建新的wcf服务时,visual studio会将您的新服务端点设置放在客户端节点下。我已经在两个部分之间移动了我的终点,试图弄清楚它们之间的区别。

我应该何时使用服务而不是客户?

<system.serviceModel>
<services>
  <service> <!--I noticed some tutorials and using wcf config edit tool 
                puts producer endpoint settings here -->
    <endpoint  blah settings/>
    <endpoint  blah settings/>
  </service>
</services>
<client> <!--Visual Studio puts both producer and consumer endpoint 
             settings here -->
  <endpoint  blah settings /> 
  <endpoint  blah settings /> 
  <endpoint  blah settings /> 
</client>
<bindings>.....
</system.serviceModel>

1 个答案:

答案 0 :(得分:0)

可以为服务的使用者和服务的发布者共享WCF web.config (或 app.config )中的许多设置包括:

  • 绑定
  • 端点行为
  • 诊断

然而,正如您所发现的,某些配置特定于服务。编写良好的服务通常指定:

  1. 基地址。这在定义服务时很方便,因为它允许您使用相对地址定义端点。然而,客户端不需要使用此特定设置,因为他们需要绝对路径。因此,在
  2. 部分中指定是没有意义的
  3. 服务也可以是客户。如果客户端和服务器端点都被拼凑在一起,那么WCF将无法知道哪一个应该使用基地址进行一件事
  4. Service behavior
  5. 通过在客户端和服务器之间划分配置,WCF能够更好地知道在哪里寻找端点。

      

    哪种互操作性最佳?

    我认为这与它无关。 WCF是实现互操作性的手段但仅仅通过使用WCF并不意味着您将实现它。当双方同意说某一特定服务合同时,就建立了互操作性;规范数据模型;数据转换;消息版本或SOA Patterns.org定义的许多其他模式因此,您必须遵循各种模式。例如如果您更改服务合同上的方法但尚未更新客户端,那么您可以通过破坏服务的架构来破坏可互操作性。

      

    Visual Studio似乎将所有端点归入客户端部分

    如果您的WCF流程既是WCF服务的消费者也是生产者,那么它不应该将所有端点置于

    之下