使用Json Bad Request的WCF服务

时间:2015-06-12 17:51:26

标签: c# json wcf

我不能为我的生活弄清楚发生了什么以及我不能使用json发布到我的服务。我已经尝试在谷歌的阳光下阅读每一条关于我所遇到的问题的评论,但目前一切都让我走到了尽头。请帮忙!

我通过邮件中的回调URL将回发服务传递给第三方服务。然后,第三方使用回叫网址将Json回送到我的wcf服务。我对初始帖子没有问题,但他们和我自己都无法点击回拨服务。我试过Fiddler返回400错误,但我不知道为什么。我需要比网络链接更多一点,以解决这个问题。请帮忙!

Web.config文件

<system.serviceModel>
<services>
  <service behaviorConfiguration="serviceBehavior" name="IBVWebService.InstantBankVerificationPostBack">
    <endpoint address="http://localhost:64337/InstantBankVerificationPostBack.svc" behaviorConfiguration="web" binding="webHttpBinding" contract="IBVWebService.IInstantBankVerificationPostBack"></endpoint>
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="serviceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>

网络界面

    [OperationContract]
    [WebInvoke(
    Method = "POST",
    BodyStyle = WebMessageBodyStyle.WrappedRequest,
    RequestFormat = WebMessageFormat.Json)]
    void PostBack(String json);

测试客户端

        WebClient client = new WebClient();
        client.Headers["Content-type"] = "application/json";
        client.Encoding = System.Text.Encoding.UTF8;
        string jsonInput = "{'data':'testvalue'}";
        client.UploadString("http://localhost:64337/InstantBankVerificationPostBack.svc/PostBack", jsonInput);

当前跟踪日志。 Tracelog

2 个答案:

答案 0 :(得分:5)

我已经使用您拥有的配置和简单的测试客户端,使用简单的wcf服务复制了您的场景:

WCF

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    void PostBack(String json);

客户:

string jsonInput = "{\"json\":\"testvalue\"}";
using (var client = new WebClient())
{
     client.Headers["Content-type"] = "application/json";
     client.Encoding = System.Text.Encoding.UTF8;
     client.UploadString("http://localhost:51175/Service1.svc/PostBack", "POST", jsonInput); 
}

在客户端中确保您匹配WCF方法的签名,即您期望的对象称为 json ,因此当您从客户端调用该方法时,发送 json: &#39;值&#39;

另外,请考虑对webclient使用using语句,以确保在使用后使用它。

答案 1 :(得分:0)

您的方法参数名称为&#34; json&#34;,因此JSON输入参数应如下所示:

string jsonInput = "{'json':'testvalue'}";