【问题标题】:How to increase the file size limit in WCF console application如何在 WCF 控制台应用程序中增加文件大小限制
【发布时间】:2011-07-05 23:02:37
【问题描述】:

我有一个非常简单的 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,其中解释说这些属性仅对基于肥皂的服务有效。他建议更新 web.config。由于这是一个控制台应用程序,我想知道如何做到这一点'

问候。

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    您可以像这样以编程方式设置最大接收消息:

     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();
    

    【讨论】:

    • 嗨,我正在创建一个安静的 wcf Web 服务。下面是代码private static ServiceHost CreateWebServiceHost() { var uri = new Uri(SysValues.baseUrl); var svc = new WebServiceHost(typeof (UploadService), uri); return svc; } 这就是所有的代码。我在哪里设置这个?我没有显式创建绑定,所以我不知道在哪里找到该属性。
    • 我根据您使用 WebServiceHost 的事实更新了我的答案,以展示如何添加服务端点。如果您需要更多信息,请告诉我:)
    • 正是我想要的。谢谢。
    【解决方案2】:

    你有look at the documentation吗?

    它涵盖了代码和配置。

    【讨论】:

    • 嗨,我已经看到了那个链接,但我不知道它如何应用于我的,因为我没有明确创建绑定。
    • 即使您没有配置绑定,您仍在使用绑定。要调整设置,您需要使用标准绑定(例如 httpBinding)配置绑定,并根据需要设置属性。如果您在 IIS/WAS 中托管,配置绑定的最佳方式是在 web.config 中指定它
    • 我正在使用控制台应用程序。我写什么代码来做到这一点。我为此创建了一个 webservicehost 实例。 var svc = new WebServiceHost(typeof (UploadService), uri)
    • 是的。显然这是可能的。我没有看到第二个链接。谢谢。
    猜你喜欢
    • 2019-02-27
    • 1970-01-01
    • 2012-04-26
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多