.net WCF Web服务,用于发送和接收大字节[]';s

.net WCF Web服务,用于发送和接收大字节[]';s,.net,asp.net,wcf,web-services,web-applications,.net,Asp.net,Wcf,Web Services,Web Applications,我已经阅读了很多关于这方面的帖子,并收到了相互矛盾的信息——我试图“概括”一些其他人提出的问题,希望在网络上的某个地方能有一个清晰的答案:-) 我正在为连接到运行ASP.NET的IIS Web服务器的PC编写.NET应用程序。Web服务器有两种类似于的方法: [WebMethod] public byte [] GetFile(string file) { // simplified return File.ReadAllBytes(file); } [WebMethod]

我已经阅读了很多关于这方面的帖子,并收到了相互矛盾的信息——我试图“概括”一些其他人提出的问题,希望在网络上的某个地方能有一个清晰的答案:-)

我正在为连接到运行ASP.NET的IIS Web服务器的PC编写.NET应用程序。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);
要求

  • 必须是.NET Web服务-带或不带SSL
  • 必须有一个二进制编码,以减少通过互联网传输的数据量
  • 4MB是数据大小的上限
  • 代码设置优先于{web/app}.config-我喜欢所有东西都放在一个地方
  • 问题

  • 编码:我将发送很多这样的信息,通过网络发送的字节数很重要-在使用HTTP上的webservice时,是否可以使用二进制消息编码或MTOM编码

  • 设置:当我传输时,会遇到许多最大请求和超时值。我想了解我在做什么,以及如何在代码(而不是.config文件)中设置它们。最好是一个图层模型(jpeg),显示每个超时和最大值的应用位置。例如,通过SOAP发送大数组不同于最大消息大小


  • 流/缓冲:如果二进制blob基于您的代码,则您使用的是ASP.NET web服务,因此您不能使用MTOM、二进制编码或流

    对于WCF服务:

  • 对。MTOM可用于BasicHttpBinding,二进制编码可用于通过HTTP传输的自定义绑定。但是二进制编码使您的服务不可互操作。只有WCF客户端才能调用您的服务
  • 是的,有大量的超时,所有这些都在上面有很好的描述
  • 它取决于您期望的并发请求的数量以及处理消息的方式。如果您预期有100个并发请求,那么您的缓冲区中将有400MB。同样,BasicHttpBinding也可以进行流式处理,但需要更改您的操作

  • 根据您的代码,您正在使用ASP.NET web服务,因此您不能使用MTOM、二进制编码或流式传输

    对于WCF服务:

  • 对。MTOM可用于BasicHttpBinding,二进制编码可用于通过HTTP传输的自定义绑定。但是二进制编码使您的服务不可互操作。只有WCF客户端才能调用您的服务
  • 是的,有大量的超时,所有这些都在上面有很好的描述
  • 它取决于您期望的并发请求的数量以及处理消息的方式。如果您预期有100个并发请求,那么您的缓冲区中将有400MB。同样,BasicHttpBinding也可以进行流式处理,但需要更改您的操作