C# 配置WCF客户端以使用HTTP GET使用WCF服务

C# 配置WCF客户端以使用HTTP GET使用WCF服务,c#,wcf,wcf-binding,wcf-client,C#,Wcf,Wcf Binding,Wcf Client,我有一个WCF服务,它只允许HTTP GET请求: [WebInvoke(Method="GET", ResponseFormat=WebMessageFormat.Json)] public string GetAppData() 该服务使用webHttpBinding公开 <system.serviceModel> <bindings> <webHttpBinding> <binding name="AppSvcBinding">

我有一个WCF服务,它只允许HTTP GET请求:

[WebInvoke(Method="GET", ResponseFormat=WebMessageFormat.Json)]
public string GetAppData()
该服务使用webHttpBinding公开

<system.serviceModel>
<bindings>
  <webHttpBinding>
    <binding name="AppSvcBinding">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </webHttpBinding>
</bindings>
    <behaviors>
在执行此代码时,我得到一个错误:

远程服务器返回意外响应:(405)方法不允许

我与fiddler进行了检查,发现我的客户机正在发送一条POST消息,而服务需要GET,因此出现了错误


我想知道如何配置客户端,以便向服务发送GET请求。

使用WebGet而不是WebInvoke

编辑

首先将方法更改为:

[WebInvoke(Method="GET", ResponseFormat=WebMessageFormat.Json,UriTemplate = "/")]
public string GetAppData() 
确保在服务器端指定了webhttpbinding

这将在服务器端修复它

备份您的客户端代码

在客户端删除服务引用。确保删除了所有配置


然后再次添加服务引用。现在应该可以了。

我遇到了一个类似的问题,客户端上生成的代理服务接口缺少我的方法上的
WebGet
属性

我手动添加了属性,解决了这个问题

因此,目前最好的解决方案似乎是将服务接口提取到单独的程序集中,然后在服务器及其客户端之间共享此程序集


自动代理生成器似乎有问题。

服务器端配置的其余部分是什么样子的?WebGet用于指定服务的行为方式。我需要在客户端说明同样的问题,您需要在更改客户端以更新webHttpBinding后更新web引用,更新服务引用没有用。我也尝试了WSHTTPBinding,但没有更改。我想知道绑定或行为中的配置更改是什么,它需要告诉.NET使服务调用成为GET请求而不是POST。
ServiceClient client = new ServiceClient("AppSvcClient");
String result = client.GetAppData();
[WebInvoke(Method="GET", ResponseFormat=WebMessageFormat.Json,UriTemplate = "/")]
public string GetAppData()