什么是最好的运输选项

时间:2015-03-03 15:19:44

标签: wcf wcf-binding

我有一个C#桌面应用程序。

它目前使用basicHttpBinding使用WCF调用我的IIS服务器将JPEGS发送到我的服务器。

我也用:

messageEncoding="Mtom"

我使用的是attibute:

[OperationContract(IsOneWay = true)]

在我的WCF界面中我的方法。

我为每张图片上传的最大字节数不会超过18KB。

上传次数与我可以调整的次数一样多。它们是按顺序上传的,不会使路由器过载。

我阅读了使用不同传输的描述,即 Basic,TCP,NamePipes。

是我在Windows服务中(即在IIS之外)托管TCP Net绑定的最佳方式,还是上传速度没有差异?

我很困惑......

3 个答案:

答案 0 :(得分:1)

需要考虑的一些想法:

Net.Tcp绑定通常被认为是不同端点之间通信的最佳性能绑定类型。缺点是net.tcp不能与非WCF客户端互操作,并且在负载平衡方面不能很好地工作。如果您的用例避免了这两个条件,那么您可能会看到Net.Tcp绑定的性能优势。

作为替代方案,您还可以考虑通过HTTP进行二进制编码,这样可以获得高性能串行器的优势,而不受Net.Tcp(互操作性和负载平衡复杂性)的使用限制。

根据您的方案,您可能需要考虑MSMQ绑定,它提供了向服务提交消息的可靠方法,但它不会将回复消息发送回客户端。这样做的好处是客户端不必等待处理消息以继续执行。

https://msdn.microsoft.com/en-us/library/vstudio/hh323713%28v=vs.100%29.aspx

此帖中提供的其他表现信息:
WCF How much faster is TCP than HTTP

答案 1 :(得分:0)

如果您仅在桌面应用程序中使用,则应使用TCP绑定。

答案 2 :(得分:0)

最常见的方法是使用流媒体。

要使用“WCF服务+ HTTP”传输大型文件/任何文件,我们可以使用以下类型的绑定:

  • wsHttpBinding
  • basicHttpBinding的

wsHttpBinding 中,我们可以将 transfermode 属性设置为缓冲,但是对于大文件使用此方法存在缺点,因为它需要在上传/下载之前将整个文件放入内存中,Web客户端和WCF服务主机上都需要一个大缓冲区。但是,这种方法对于安全地传输小文件非常有用。

basicHTTPBinding 中,我们可以将 transfermode 用作流式传输,以便可以以块的形式传输文件。

NetTcpBinding在安全性和性能方面更有用,但对于您的情况,我建议使用basicHTTPBinding。

相关问题