张贴大型JSON时,RESTful WCF服务失败

时间:2018-12-30 19:11:08

标签: json wcf http-status-code-404

我正在编写一个调用WCF RESTful接口的Web应用程序。我的服务方法之一采用JSON字符串作为参数。只要JSON字符串在特定长度内,对该方法的调用就可以很好地工作。一旦字符串超过该长度,服务就会返回404错误。我一直在寻找答案,并尝试了几种不同的方法来解决此问题,但错误仍然存​​在。

客户端代码为:

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUri + parameters);
            request.Method = "POST";
            request.ContentType = "application/json; charset=utf-8";

            HttpWebResponse response = request.GetResponse() as HttpWebResponse;

服务方法的合同为:

    [OperationContract]
    [WebInvoke(Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Wrapped,
    UriTemplate = "MethodName?stages={stages}&providerID={providerID}")]
    string MethodName(string stages, int providerId);

上面的 stages 参数是接收JSON长字符串的参数。

我还将以下内容添加到服务的web.config文件中:

  <bindings>
  <basicHttpBinding>
    <binding name="basichttpbinding_esynchrony"
        maxBufferPoolSize="2147483647"
        maxReceivedMessageSize="2147483647">
    </binding>
  </basicHttpBinding>
</bindings>

如果任何人都可以提供答案或什至指向说明如何解决此特定问题的文章的链接,将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,我注意到您在指定操作为GET的同时向服务创建了一个Http-POST请求,它可以正常工作吗?在我看来,服务合同可能还有另一个绑定,例如Webhttpbinding,通过它可以以Restful样式发布WCF服务。在这种情况下,服务器将接受JSON数据,否则仅接受基于XML的SOAP消息,而HTTP谓词始终为POST。
此外,如果请求超出长度,我们通常使用以下配置。

<system.serviceModel>
    <services>
      <service behaviorConfiguration="mybehavior" name="WcfService1.Service1">
        <endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1" behaviorConfiguration="webbev" bindingConfiguration="mybinding"></endpoint>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <bindings>
      <webHttpBinding>
        <binding name="mybinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" />
          <security mode="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mybehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webbev">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>

请随时告诉我是否有什么可以帮忙的。