如何在WCF控制台应用程序中增加文件大小限制

时间:2011-07-02 17:16:52

标签: c# wcf

我有一个非常简单的WCF服务(用于文件上传的控制台应用程序)。我一直收到错误(400)错误的请求。当我上传小文件(4kb)但失败700kb时,它可以工作。

从堆栈溢出和其他的读数中,我将不得不增加MaxReceivedMessageSize。这是使用自定义类实现并覆盖OnOpening方法但它仍然无法正常工作。

我正在使用webclient测试控制台应用程序     outputBytes = webClient.UploadData(baseUrl + "/uploads/2." + filenameOnly, File.ReadAllBytes(filename));

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

如何解决此问题? PS:应用程序没有配置文件,所以我将看看如何在代码中设置它。如果没有,需要配置文件,那么内容应该是什么。

注意: 我找到了这个链接Bad Request Error 400 - WCF Client,其中解释说这些属性仅对基于soap的服务有效。他建议更新web.config。由于这是一个控制台应用程序,我想知道如何做到这一点'

问候。

2 个答案:

答案 0 :(得分:1)

你有look at the documentation吗?

它涵盖了代码和配置。

答案 1 :(得分: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();