POST请求 - 长JSON字符串 - 请求大小太大/未找到端点

时间:2015-05-09 15:20:14

标签: c# json vb.net post webrequest

这是我在这里发布的第一篇文章,如果我违反任何规则,请原谅。我已经广泛搜索了stackoverflow,但我无法找到问题的答案。

基本上,我试图从Windows桌面应用程序发送一个长JSON字符串作为POST请求的主体到WCF服务。长期'我的意思是,当我反序列化字符串并将其导出为XML文件时,它需要大约200 kB。但是,我也没有获得任何短JSON字符串。

我尝试使用RestSharp,但我一直没有找到#34;端点。"错误。当我尝试在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中实现这个并且它可以工作,但是我们在VB.NET和AJAX中构建Windows桌面应用程序并没有完全逐字翻译成VB.NET 。

我将不胜感激任何帮助。提前致谢。

P.S。这是他发给我的HTML文件中的AJAX代码 - 它有效。出于安全考虑,我拿出了URL,并用简单的JSON字符串替换了长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>

1 个答案:

答案 0 :(得分:0)

这听起来像早期的413错误并且隐藏到端点未找到/ 400错误。 IIRC默认的最大请求实体是65k,这就是为什么你得到413错误。这个最大大小可以帮助阻止任何拒绝服务攻击。如果要更改此设置,最简单的方法是使用WCF服务配置编辑器(VS2010:工具&gt; WCF服务配置编辑器)打开WCF服务配置文件。您可能需要使用大型MaxReceivedMessageSize创建新的绑定配置。 (再次不要让它太大或风险DOS攻击)。您可能还需要更改MaxStringContentLength。然后设置端点以使用此新绑定配置。 这应该处理413错误。

未找到的端点稍微复杂一些。因为它暗示您的客户端正在尝试调用未找到的服务器上的端点。由于您没有包含客户端尝试调用的端点的详细信息或服务器提供的服务/端点,因此我无法提供很多帮助。但是,在服务配置编辑器中,您可以转到诊断并打开跟踪。这将在服务器上创建一个跟踪文件,可以帮助您发现问题。