WebServiceHost大输入输出字符串

本文关键字:字符串 输入输出 WebServiceHost | 更新日期: 2023-09-27 18:17:36

服务器代码:

WebServiceHost w = new WebServiceHost(typeof(WebHost), new Uri("http://localhost/Host");
BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxBufferPoolSize = 2147483647;
binding.MaxBufferSize = 2147483647;
binding.MaxReceivedMessageSize = 2147483647;
binding.ReaderQuotas = new XmlDictionaryReaderQuotas { MaxStringContentLength = 2147483647 };
w.AddServiceEndpoint(typeof(WebHost), binding, "http://localhost/Host");
w.Open();

[ServiceContract]
public class HEWebHost
{
    [OperationContract]
    [WebInvoke(UriTemplate = "Host")]
    public string Host(string largeRequest)
    {
    // ... Some code
    }
}
客户机代码:

HttpWebRequest request = HttpWebRequest.Create("http://localhost/Host") as HttpWebRequest;
request.Method = "POST";
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(largeRequestString);
writer.Flush();
writer.Close();
writer.Dispose();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
StreamReader reader = new StreamReader(response.GetResponseStream());
string output = reader.ReadToEnd();

即使我设置了绑定对象的MaxReceivedMessageSize,我仍然得到"400个错误请求"。完全相同的代码,只有一个小字符串输入工作得很好,所以…我怎样才能使这段代码工作与较大的输入字符串?

WebServiceHost大输入输出字符串

您的代码有问题。您正在使用WebServiceHost (WCF REST编程模型)和basicHttpbinding (WCF SOAP编程模型)。你不能把这两种方法混在一起。

使用ServiceHost WebHttpBinding来纠正这个问题。

另外,请注意,对于WCF REST风格的绑定,您需要确保IIS可以支持更大的传输-默认情况下是4096 (4 MB)

检查你的网页。配置-你有这样的条目吗?

<system.web>
     ......
     <httpRuntime maxRequestLength="32678"/>  
     ......
</system.web>

尽管我设置了绑定对象的MaxReceivedMessageSize仍然收到"400个错误请求"

这只是一个"糟糕的请求"。检查WCF服务器日志以获得确切的错误消息。