我正在从另一个问题跟踪此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添加服务引用然后开始调用),因此手动设置客户端配置文件并不理想。
答案 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>