Ошибки службы WCF (Rest), когда объект JSON имеет длинную строку - PullRequest
0 голосов
/ 13 января 2011

У меня есть служба WCF, реализованная с использованием WebServiceHostFactory (REST).

Я вызываю конечную точку службы как POST, отправляя объект json со строковым свойством.

Это работает до некоторой степени, но кажется, что, если длина этой строки становится слишком большой (не знаю точно, как долго (8000 символов работает, но 9000 не работает ... Я не пытался, но «точка разрыва» могла бы быть 8192).

Я пытаюсь проверить StatusCode при обратном вызове, который отлично работает для небольших строк, но когда строка слишком длинная, код, показанный ниже, выдает следующие ошибки:

System.Net.WebException: The remote server returned an error: NotFound.

Код обратного вызова:

var request = (HttpWebRequest)result.AsyncState;
var response = (HttpWebResponse)request.EndGetResponse(result);

Я пытаюсь выяснить, в чем проблема, поскольку служба существует, и я получаю ее только тогда, когда строка слишком длинная.

Это размер объекта json? Это мое определение сервиса? Это что-то в WCF?

Спасибо

Ответы [ 2 ]

1 голос
/ 13 января 2011

Я думаю, что это проблема с MaxStringContentLength свойством из квот читателя.Его значение по умолчанию действительно 8192. Вы можете изменить значение в конфигурации привязки:

<system.serviceModel>
  <bindings>
    <webHttpBinding>
      <binding name="LargeString">
        <readerQuotas maxStringContentLength="16000" />
      </binding>
    </webHttpBinding>
  </bindings>
</system.serviceModel>

Ссылаться на эту конфигурацию привязки в конфигурации конечной точки:

  <endpoint address="..." contract="..." binding="webHttpBinding" bindingConfiguration="LargeString" />

В случае WCF 4.0 вы можетеопустите имя в определении привязки, и оно должно использоваться в качестве конфигурации по умолчанию для всех конечных точек webHttp.

0 голосов
/ 13 января 2011

Я могу придумать причины, не зная этого.Может быть, вы превышаете максимальную длину сообщения?Это может быть установлено в вашем файле App.Config.

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

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