我正在使用WCF服务并收到错误消息“远程服务器返回错误:(400)错误请求。”通过WebClient消费时
public class WebClientService : WebClient
...
base.Credentials = CredentialCache.DefaultCredentials;
base.OpenReadCompleted += new OpenReadCompletedEventHandler(ReadJsonStringAsyncComplete);
base.OpenReadAsync(new Uri("http://localhost/xxxx.svc/GetData"));
...
要使用的WCF服务如下(请注意,两者都存在于同一解决方案中(不同的项目)
合同/接口: -
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/GetData", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
IList<MyType> GetData();
实现: -
public IList<MyType> GetData()
{
return (new MyTypeRepository()).All.ToList();
}
配置: -
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service name="xxxx.Service.MyService" behaviorConfiguration="DataExtractBehavior">
<endpoint address="http://localhost:1422/MyService.svc" binding="webHttpBinding" bindingConfiguration="DataExtractBinding" behaviorConfiguration="MyEndpointBehavior" contract="xxxx.Service.Common.IMyService"></endpoint>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="MyEndpointBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="UseAspNetRoles" />
<serviceCredentials>
<windowsAuthentication allowAnonymousLogons="false" includeWindowsGroups="true" />
</serviceCredentials>
</behavior>
<behavior name="DataExtractBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<etwTracking profileName="EndToEndMonitoring Tracking Profile" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<etwTracking profileName="EndToEndMonitoring Tracking Profile" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="DataExtractBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"></transport>
</security>
</binding>
</webHttpBinding>
</bindings>
我可以通过http://localhost:1422/xxxx.svc
查看服务定义页面但是我似乎无法调用方法GetData(添加到URI的末尾 - http://localhost:1422/xxxx.svc/GetData
)
有谁知道为什么我会收到HTTP 400 - 错误请求
非常感谢 特拉维斯
答案 0 :(得分:2)
相同的代码对我来说很好。更改您的配置设置,如下所示,
<endpointBehaviors>
<behavior name="MyEndpointBehavior">
<webHttp helpEnabled="true" automaticFormatSelectionEnabled="true" />
</behavior>
</endpointBehaviors>
使用http://localhost:1422/xxxx.svc/help
浏览您的服务,您可以使用GetData操作。现在尝试使用http://localhost:1422/xxxx.svc/GetData
它会起作用。
此外,您的应用程序正在另一个端口(除1422之外)运行,如果是这样,请转到您的应用程序(项目) - &gt;属性 - &gt; Web-&gt;特定端口(输入1422)现在尝试这个浏览。
希望这有帮助。
答案 1 :(得分:0)
这个问题完全是我的错 - 我正在向上述服务发出“发布”请求,该请求被视为“获取”请求