Служба RESTful WCF завершается ошибкой при большом размещении JSON - PullRequest
0 голосов
/ 30 декабря 2018

Я пишу веб-приложение, которое вызывает интерфейс WCF RESTful.Один из моих методов обслуживания принимает строку 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);

Приведенный выше параметр stage - это тот, который получает длинную строку JSON.

Я также добавил в Интернет следующее.config файл службы:

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

Если кто-то может помочь с ответом или даже ссылкой на статью, которая объясняет, как решить эту конкретную проблему, это будет очень цениться.

1 Ответ

0 голосов
/ 31 декабря 2018

Во-первых, я заметил, что вы создали запрос Http-POST к службе, в то время как вы указываете, что операция GET, может ли она работать хорошо?На мой взгляд, контракт на обслуживание может иметь другую привязку, такую ​​как Webhttpbinding, с помощью которой можно было бы опубликовать службу WCF в стиле Restful.В этом случае сервер будет принимать данные JSON, в противном случае будет принято только сообщение SOAP на основе XML, а глагол 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>

Не стесняйтесь, дайте мне знать, если я могу чем-то помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...