Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# POST请求-长JSON字符串-请求大小太大/找不到端点_C#_Json_Vb.net_Post_Webrequest - Fatal编程技术网

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

C# POST请求-长JSON字符串-请求大小太大/找不到端点,c#,json,vb.net,post,webrequest,C#,Json,Vb.net,Post,Webrequest,这是我第一次在这里发帖,所以如果我违反任何规则,请原谅。我已经广泛地搜索了stackoverflow,但没有找到问题的答案 基本上,我正在尝试从Windows桌面应用程序向WCF服务发送一个长JSON字符串,作为POST请求的主体。“long”的意思是,当我反序列化字符串并将其导出为XML文件时,它将占用大约200KB的空间。然而,我也不能用一个短的JSON字符串 我尝试使用RestSharp,但始终找不到端点。错误当我尝试在StackOverflow上找到的方法或MSDN中的默认方法时,我会收

这是我第一次在这里发帖,所以如果我违反任何规则,请原谅。我已经广泛地搜索了stackoverflow,但没有找到问题的答案

基本上,我正在尝试从Windows桌面应用程序向WCF服务发送一个长JSON字符串,作为POST请求的主体。“long”的意思是,当我反序列化字符串并将其导出为XML文件时,它将占用大约200KB的空间。然而,我也不能用一个短的JSON字符串

我尝试使用RestSharp,但始终找不到端点。错误当我尝试在StackOverflow上找到的方法或MSDN中的默认方法时,我会收到一个错误消息:error 413:Request Entity Too Large。或者,如果我发送一个短JSON字符串,就会得到一个错误400:Bad请求

以下是我使用的方法

Restsharp:

在这里,我以141票使用了第一个答案

我使用VB.NET,但我也很乐意接受C语言的答案。然而,用PHP或AJAX来回答这个问题对我没有多大好处。我已经有一位同事在AJAX中实现了这一点,而且效果很好,但是我们正在VB.NET中构建Windows桌面应用程序,AJAX并没有完全逐字翻译成VB.NET

我将感谢任何帮助。提前谢谢

另外,这是他发送给我的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>

听起来413错误在前面出现了,并且隐藏到端点未找到/400错误。IIRC默认的最大请求实体是65k,这就是为什么会出现413错误。此最大大小用于尝试并帮助阻止任何拒绝服务攻击。如果要更改此设置,最简单的方法是使用WCF服务配置编辑器VS2010:Tools>WCF服务配置编辑器打开WCF服务配置文件。您可能需要创建一个具有大MaxReceivedMessageSize的新绑定配置。再次强调,不要把它做得太大,或者冒DOS攻击的风险。您可能会发现还需要更改MaxStringContentLength。然后将端点设置为使用此新绑定配置。 这应该可以处理413错误


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

欢迎使用StackOverflow。关于提问的一些注意事项:我试着每个问题问一个问题。包含多个独立部分的问题得到的回答较少。2显示您迄今为止所做的工作-VB.NET或c。因此,我建议取消这个问题,并提出两个类似于如何使用RestSharp发布大型JSON字符串和如何使用WebClient发布大型JSON字符串的问题。如果你使用chrome,我建议你看看postman。它是免费的,允许您在不使用客户端的情况下发布到Web服务。通过这种方式,您可以发现这是客户机还是服务器的问题。如果您不使用chrome,我建议您尽可能开始使用!我理解您为什么要删除url,但请考虑:这也会删除端点,这使得我们很难帮助您。如果这是一个安全的服务,那么您需要实际保护它,仅仅隐藏它是不够的。如果它是面向公众的,为什么要把它藏在这里?