2015-05-09 117 views
0

这是我第一次在这里发帖,所以请原谅,如果我违反任何规则。我已经广泛搜索了stackoverflow,但我无法找到我的问题的答案。POST请求 - 长JSON字符串 - 请求大小太大/端点未找到

基本上,我试图从Windows桌面应用程序发送一个长的JSON字符串作为POST请求的正文到WCF服务。 “长”我的意思是,当我反序列化字符串并将其导出为XML文件时,它需要大约200 kB。但是,我没有得到任何带有简短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中实现了它,并且它可以工作,但我们正在VB.NET中构建Windows桌面应用程序,而AJAX并不完全将单词转换为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> 
+2

欢迎来到StackOverflow。关于在这里提问的一些注意事项:1)尝试每个问题提出一个问题。具有多个独立部分的问题得到的答复较少。 2)显示你迄今为止所做的 - VB.NET或c#。因此,我建议退休问题并提出2个类似于“如何使用RestSharp发布大型JSON字符串”和“如何使用WebClient发布大型JSON字符串”的问题。在两者中包括有效的PHP代码都很好。 – dbc

+0

如果你使用铬,我建议看看邮差。它是免费的,并允许您发布到您的web服务,而无需使用您的客户端。这样你就可以发现它是否与客户端或服务器有问题。如果你不使用铬我建议你开始(如果可能)! – mattumotu

+0

我明白您为什么要移除网址,但请考虑:这也会移除端点,这使我们很难为您提供帮助。如果这意味着要成为一项安全的服务,那么他们需要真正的保护它,仅仅隐藏它是不够的。如果它的公众面临那么为什么要把它藏在这里呢? – mattumotu

回答

0

这听起来像413错误在早期踢,隐藏到端点没有找到/ 400错误。 IIRC默认的最大请求实体是65k,这就是为什么你得到413错误。这个最大尺寸可以帮助阻止任何拒绝服务攻击。如果你想改变这个,最简单的方法是使用WCF服务配置编辑器(VS2010:工具> WCF服务配置编辑器)打开WCF服务配置文件。您可能需要创建一个具有较大MaxReceivedMessageSize的新绑定配置。 (也不要让它太大或者冒DOS攻击的危险)。您可能会发现您还需要更改MaxStringContentLength。然后将您的端点设置为使用此新绑定配置。 这应该处理413错误。

找不到的端点稍微复杂一些。因为它意味着你的客户端正在尝试调用未找到的服务器上的端点。由于您未包含客户端试图拨打的端点详细信息或服务器提供的服务/端点,因此我无法提供帮助。然而,再次在服务配置编辑器中,您可以进入诊断并打开跟踪。这将在服务器上创建一个跟踪文件,可以帮助您发现问题。