2011-07-02 58 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

相关问题