2015-05-09 96 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錯誤。

找不到的端點稍微複雜一些。因爲它意味着你的客戶端正在嘗試調用未找到的服務器上的端點。由於您未包含客戶端試圖撥打的端點詳細信息或服務器提供的服務/端點,因此我無法提供幫助。然而,再次在服務配置編輯器中,您可以進入診斷並打開跟蹤。這將在服務器上創建一個跟蹤文件,可以幫助您發現問題。