2011-07-02 95 views
0

我已經有一個非常簡單的WCF服務(用於文件上傳的控制檯應用程序)。我不斷收到錯誤(400)錯誤的請求。它在我上傳小文件(4kb)但失敗700kb時起作用。如何增加WCF控制檯應用程序中的文件大小限制

從我從堆棧溢出和其他的讀物中,我將不得不增加MaxReceivedMessageSize。這是使用自定義類實現的,並覆蓋了OnOpening方法,但仍然無效。

我在
var uri = new Uri("http://localhost:8000");
var svc = new WebServiceHost(typeof (UploadService), uri);

使用WebClient的
outputBytes = webClient.UploadData(baseUrl + "/uploads/2." + filenameOnly, File.ReadAllBytes(filename));

另外,我使用的WebServiceHost控制檯應用程序測試,我該如何解決這個問題? PS:應用程序沒有配置文件,所以我會看看如何在代碼中設置它。如果不是,並且需要配置文件,那麼內容應該是什麼。

說明: 我發現此鏈接Bad Request Error 400 - WCF Client其中解釋說這些屬性只對基於soap的服務有效。他建議更新web.config。由於這是一個控制檯應用程序,我想知道如何做到這一點'

問候。

回答

1

可以編程設置maximumreceivedmessage這樣的:

var binding = new wsHttpBinding(); // or whatever binding you are using 
binding.MaxReceivedMessageSize = Int32.MaxValue; 
var wcfClient = new WCFServiceTestClient(binding, strServiceURL); 

希望這將足以解決你的問題,但你可能還需要考慮其發送到之前砍了文件轉換成位(配料)服務器。發送非常大的數據塊可能會導致巨大的內存損失,因爲客戶端必須在將整個事件發送到服務器(然後在服務器端進行反序列化)之前對其進行序列化。

編輯:根據您的附加評論(如下圖),在託管服務的應用程序的代碼可能是這個樣子:

 WebServiceHost webServiceHost = new WebServiceHost(typeof(UploadService), uri); 
     WebHttpBinding binding = new WebHttpBinding(); 
     binding.MaxReceivedMessageSize = Int32.MaxValue; 
     webServiceHost.AddServiceEndpoint(typeof(IUploadService), binding, "WebServiceHost"); 
     webServiceHost.Open(); 
+0

嗨,我正在創建一個寧靜的wcf web服務。以下是代碼 'private static ServiceHost CreateWebServiceHost() { var uri = new Uri(SysValues。的baseUrl); var svc = new WebServiceHost(typeof(UploadService),uri); return svc; }' 這就是所有的代碼。我在哪裏設置?我沒有明確地創建一個綁定,所以我不知道屬性在哪裏找到。 – ritcoder

+0

我根據您使用WebServiceHost的事實更新了我的答案,以顯示如何添加服務端點。讓我知道如果你需要更多的信息:) – Franchesca

+0

正是我在找什麼。謝謝。 – ritcoder

1

你有沒有look at the documentation?它包括代碼和配置。

+0

嗨,我已經看到了鏈接,但我不知道如何它適用於我的,因爲我沒有明確創建綁定。 – ritcoder

+0

即使沒有配置,仍然使用綁定。要調整設置,您需要使用標準綁定(如httpBinding)並根據需要設置屬性來配置綁定。如果您在IIS/WAS中託管,配置綁定的最佳方式是通過在web.config中指定它 –

+0

我正在使用控制檯應用程序。我要寫什麼代碼才能做到這一點。我正在爲此創建一個webservicehost的實例。 'var svc = new WebServiceHost(typeof(UploadService),uri)' – ritcoder

相關問題