2015-05-09 4 views
0

Это мое первое сообщение здесь, поэтому, пожалуйста, простите, если я нарушу какие-либо правила. Я много раз искал stackoverflow, но я не смог найти ответ на свою проблему.POST-запрос - длинная строка JSON - слишком большой размер запроса/конечная точка не найдена

В принципе, я пытаюсь отправить длинную строку JSON из рабочего стола Windows в виде тела запроса POST для службы WCF. «Long» я имею в виду, что, когда я десериализую строку и экспортирую ее как XML-файл, она занимает около 200 кБ. Тем не менее, я никуда не дену с короткой строкой JSON.

Я попытался использовать RestSharp, но я продолжаю получать «Конечную точку не найден». ошибка. Когда я пытаюсь найти метод, найденный в StackOverflow или методом по умолчанию из MSDN, я получаю сообщение об ошибке «Ошибка 413: запросить сущность слишком большую». или, если я отправлю короткую строку JSON, я получаю «Ошибка 400: Плохой запрос».

Вот методы, которые я использовал.

Restsharp: RestSharp simple complete example

(здесь я использовал первый ответ с 141 голосами) .NET: Simplest way to send POST with data and read response

https://msdn.microsoft.com/en-us/library/debx8sh9%28v=vs.100%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-27

Я использую VB.NET, но я с удовольствием принимаю ответ в C# также. Однако ответ на PHP или AJAX не принесет мне много пользы. У меня уже был коллега, реализующий это в AJAX, и он работает, но мы создаем настольное приложение Windows в VB.NET, и AJAX не переводит слово в слово на VB.NET.

Буду признателен за любую помощь. Заранее спасибо.

P.S. Это его код AJAX в HTML-файле, который он мне отправил, и он работает. Я достал URL-адрес для целей безопасности, и я заменил длинную строку JSON простой.

<!DOCTYPE HTML> 
<html> 
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> 
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> 

<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
<script type="text/javascript"> 

function btn_click(){ 
//alert('btn'); 
var updatedData='[{"firstname": "Billy", "lastname": "Bob", "occupation": "cowboy"}]'; 
$.ajax({ 
     type: "POST", 
     url:"<suppressed>", 
     data: JSON.stringify(updatedData), 
     contentType: "application/json; charset=utf-8?", 
     dataType: "json", 
     processData: true, 
     success: function (data, status, jqXHR) { 
        alert("success…" + data); 
     }, 
     error: function (xhr) { 
       $('#msgText').text(xhr.responseText); 
        //alert(xhr.responseText); 
     } 
}); 

} 
</script> 
</head> 
<body> 
<input type="button" text="Click" Value="Click" onclick="btn_click()"> 
<label id="msgText"></label> 
</body> 
+2

Добро пожаловать в StackOverflow. Несколько заметок о задании вопросов здесь: 1) Постарайтесь задать один вопрос на вопрос. Вопросы с несколькими независимыми частями получают меньше ответов. 2) Покажите, что вы сделали до сих пор - VB.NET или C#. Таким образом, я предлагаю отложить этот вопрос и задать два вопроса, похожие на «Как разместить большую строку JSON с помощью RestSharp» и «Как разместить большую строку JSON с помощью WebClient». Включение рабочего кода PHP в оба варианта отлично. – dbc

+0

Если вы используете хром, я рекомендую взглянуть на почтальона.Это бесплатно и позволяет публиковать сообщения в своем веб-сервисе без использования вашего клиента. Таким образом, вы можете узнать, есть ли проблема с клиентом или сервером. и если вы не используете хром, я рекомендую вам начать (если это возможно)! – mattumotu

+0

Я понимаю, почему вы хотите удалить URL-адрес, но подумайте: это также удаляет конечную точку, что затрудняет нам помощь. Если это предназначено для обеспечения безопасного обслуживания, вам нужно будет фактически его защитить, а просто скрывать его недостаточно. И если его публика сталкивается тогда, зачем скрывать ее здесь? – mattumotu

ответ

0

Похоже, что ошибки 413 были удалены ранее и скрыты до конечной точки не найдены/400 ошибок. IIRC объект запроса максимального размера по умолчанию - 65 тыс., Поэтому поэтому вы получаете ошибку 413. Этот максимальный размер предназначен для предотвращения любых атак с отказами в обслуживании. Если вы хотите изменить это, самым простым способом будет использование редактора конфигурации службы WCF (VS2010: Инструменты> Редактор конфигурации службы WCF). Откройте файл конфигурации служб WCF. Возможно, вам понадобится создать новую конфигурацию привязки с большим MaxReceivedMessageSize. (опять же не делайте его слишком большим или рискуйте атаками DOS). Вы можете обнаружить, что вам нужно также изменить MaxStringContentLength. Затем установите конечные точки для использования этой новой конфигурации привязки. Это должно иметь дело с ошибкой 413.

Конечная точка не найдена немного сложнее. Поскольку это означает, что ваш клиент пытается вызвать конечную точку на сервере, которая не найдена. Поскольку вы не указали детали конечной точки, которую пытается вызвать ваш клиент, или услуг/конечных точек, которые предлагает сервер, я не могу много сделать, чтобы помочь. Однако снова в редакторе служебных настроек вы можете перейти к диагностике и включить трассировку. Это создаст файл трассировки на сервере, который может помочь вам выявить проблему.