我有一个非常简单的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。由于这是一个控制台应用程序,我想知道如何做到这一点'
问候。
答案 0 :(得分:1)
它涵盖了代码和配置。
答案 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();