WCF服务引用不包括绑定和客户端端点

时间:2014-04-03 22:12:41

标签: c# web-services wcf

我正在从另一个问题跟踪此answer,尝试让我的WCF服务仅处理GET请求。我已将[WebGet]添加到我的操作中,添加了<webHttp />的端点行为,更改了我的默认端点以使用所述行为,并将默认端点的绑定更改为webHttpBinding

web.config的system.servicemodel如下所示:

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
            <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
    multipleSiteBindingsEnabled="true" />

  <services>
    <service name="TestServiceLibrary.TestService">
      <endpoint behaviorConfiguration="webBehavior"
         address=""
         binding="webHttpBinding"
         contract="TestServiceLibrary.ITestService" />
      <endpoint 
         address="mex" 
         binding="mexHttpBinding" 
         contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

这使得我的服务可以像TestService.svc/GetData?value=x一样调用,而且效果很好。现在我想向客户端项目添加服务引用。当我这样做时,客户端项目的app.config文件没有配置绑定和客户端端点。如果我删除上面的行为webBehavior,请将默认端点绑定更改回wsHttpBinding,然后重新添加客户端的服务引用 - 成功添加客户端绑定和端点,但我失去了GET支持。

我意识到我可以使用wsHttpBinding离开默认端点并添加一个端点,其中不同的地址设置为绑定webHttpBinding和行为<webHttp />,但我真的很喜欢客户端应用程序将使用GET。

编辑:

我也对在这种情况下配置无法更新的原因感兴趣。我希望允许使用此服务的低摩擦力(通过visual studio添加服务引用然后开始调用),因此手动设置客户端配置文件并不理想。

1 个答案:

答案 0 :(得分:0)

请尝试以下配置。我没有测试过,但应该可以正常工作。另外,我建议您使用this example自己制作客户端。请注意,ISampleService接口(在您的情况下为TestServiceLibrary.ITestService)和此接口引用的所有数据交换应位于单独的程序集中,由服务和客户端引用为dll。

<system.serviceModel>
    <client>
        <endpoint behaviorConfiguration="webBehavior" address="url_to_TestService.svc" binding="webHttpBinding" contract="TestServiceLibrary.ITestService" />
    </client>
    <behaviors>
        <endpointBehaviors>
            <behavior name="webBehavior">
                <webHttp />
            </behavior>
        </endpointBehaviors>
    </behaviors>
</system.serviceModel>