用于发送和接收最大字节的WCF Web服务

时间:2010-09-17 20:17:05

标签: .net asp.net wcf web-services web-applications

我已经阅读了很多有关此内容的帖子并且收到了相互矛盾的信息 - 我正试图“归结”其他人提出的一些问题,希望在网络上某处可以找到一个明确的答案:-)

我正在为我的PC编写.NET应用程序,该应用程序连接到运行ASP.NET的IIS Web服务器。 Web服务器有两种类似的方法:

[WebMethod]
public byte [] GetFile(string file)
{
    // simplified 
    return File.ReadAllBytes(file);
}

[WebMethod]
public void PutFile(string file, byte [] data)
{
    // simplified 
    return File.WriteAllBytes(file, data);
}

在客户端上,我想使用大小约为4MB的缓冲区调用GetFile / PutFile。

BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
binding.AllowCookies = true;
binding.OpenTimeout = ???;
binding.MaxBufferSize = ???;
binding.MaxReceivedMessageSize = ???;
onlineTransport = new RemoteObject.RemoteObjectSoapClient(binding, new EndpointAddress(BaseUrl + "/page.asmx"));

// Read a file
byte [] foo = onlineTransport.GetFile("foo.file");

// Write a file
onlineTransport.PutFile("bar.file", foo);

要求

  1. 必须是.NET Web服务 - 包含和不包含SSL
  2. 必须使用二进制编码来减少通过互联网传输的数据量
  3. 4MB是数据大小的上限
  4. 代码设置优先于{web / app} .config - 我喜欢一切地方的所有内容
  5. 问题

    1. 编码:我将发送大量这些内容并且通过线路发送的字节数很重要 - 是否可以在通过HTTP使用Web服务时使用二进制消息编码或MTOM编码?

    2. 设置:当我发送时,有许多最大请求和&遇到的超时值。我想了解我正在做什么以及如何在代码中设置它们(而不是.config文件)。什么是GREAT是一个层模型(jpeg),显示每个超时和最大值适用的位置。例如,通过SOAP发送大型数组与最大邮件大小不同。

    3. STREAMING / BUFFERING:如果二进制blob大小<4MB,则需要流式传输吗?数据很容易从文件系统读取/写入,不会动态生成数据。如果内存命中只有4MB我很高兴,我担心4MB可能在各种缓冲发生后出现气球? - 我想更好地了解最新情况

    4. 一些研究材料:  http://msdn.microsoft.com/en-us/library/ms733742.aspx

1 个答案:

答案 0 :(得分:-1)

根据您的代码,您使用的是ASP.NET Web服务,因此您无法使用MTOM,二进制编码或流式传输。

对于WCF服务:

  1. 是。 MTOM可用于BasicHttpBinding,二进制编码可用于通过HTTP传输进行自定义绑定。但二进制编码使您的服务不可互操作。只有WCF客户才能调用您的服务。
  2. 是的,有很多超时,所有内容都在MSDN上有详细描述。
  3. 这取决于您期望的并发请求数以及处理消息的方式。如果您期望100个并发请求,则缓冲区中将有400MB。 BasicHttpBinding可以再次流式传输,但它需要更改您的操作。