WCF绑定 - 这么多!我该如何选择一个?

时间:2008-10-26 09:41:49

标签: .net wcf wcf-binding

我们有R Server  (R是统计分析中使用的编程语言),它基本上采用脚本和csv文件,处理一些数据并以文本形式返回结果。

我需要在R服务器上编写服务,以便.net客户端(可以是.Net Windows Forms或ASP.Net)可以连接到R服务器,提交脚本和CSV文件,并获得结果

我对可用的许多不同的绑定感到困惑,网络上的信息似乎很稀疏/分散在选择的内容上。

此外,最好是在IIS中运行该服务,还是作为单独的“命令行”类型的侦听器服务(后者似乎比IIS更丑陋,我不知道为什么有人会选择这样做,如果他们可以运行它在IIS)?

4 个答案:

答案 0 :(得分:10)

就个人而言,我建议您提供最简单的绑定,以满足您的需求。我已经完成了很多WCF(有些非常复杂),而且我从来没有使用过BasicHttpBinding以外的任何东西。这也允许与非.NET客户端最大可能的兼容性,并允许您使用MTOM之类的东西进行有效的二进制传输。

重新托管; IIS对于客户端/服务器设置来说确实是最简单的;两个特别的优势:

  • 易于配置SSL(即您只配置IIS,WCF将使用它)
  • 易于负载平衡(只需对您的网络农场负载均衡)

(我相信在BasicHttpProfile上运行的WCF也可以利用你的IIS压缩[GZip / Deflate]设置,但是不要引用我......)

如果(例如)您需要长时间运行的有状态服务器,则可以选择使用独立主机(通常通过Windows服务)。 IIS有这种习惯(按设计)回收应用程序池,如果你在内存中保留一些内容,那就不好了!另一个例子是你希望它已经运行以获得快速的“第一次”命中性能(而不是等待IIS / ASP.NET启动)。涵盖这两者的示例可能是托管WF(工作流)服务器。

再次;如果您不需要这种复杂性,请选择最简单的选项:在IIS中托管。

答案 1 :(得分:8)

确实有很多选择。

<强>装订

WCF提供的绑定是一组用于常见场景的协议。它指定传输,消息和安全信息。

选择装订时,您需要找出所需的功能。 例如你可能需要一种方法

  • 验证客户端,因为您不希望每个人都能使用您的服务。
  • 数据可能需要加密。
  • 该服务需要与其他平台的客户端互操作。
  • 消息的开销正在成为一个问题。

如果您知道客户端始终来自dot net,则可以使用net tcp绑定,这比basicHttpbinding更快。但是,basicHttpBinding是一个可互操作的协议,即使是php或java客户端也可以毫无问题地与它通信。

定义您自己的服务需求,然后查找现有的绑定以满足您的需求,如果没有任何现有绑定,您可以创建自己的绑定,称为自定义绑定,它可以组合来自不同绑定的功能共同实现目标。

<强>托管

IIS更具可扩展性。如果您的服务不需要必须在长期守护进程(Windows服务或控制台应用程序)中托管的状态,则可以选择IIS,因为很容易为您的服务启用压缩和加密。

有关绑定的更多信息

如果您希望在浏览器中调用您的服务,即javascript WebHttpBinding是为你定义的dot net的好东西。您可以使用enbableWebScript使服务理解javascript的JSON。

<强>状况

如果一个特定绑定无法满足所有要求,则可以在不同端点以不同绑定方式公开每个服务。例如host / soap host / nettcp host / json

答案 2 :(得分:5)

我建议参考Juval Lowy的“编程WCF服务”一书。

他走过决策图表,帮助您决定使用哪种绑定。你也可以在这里找到他关于绑定的文章

http://www.code-magazine.com/article.aspx?quickid=0605051&page=3

答案 3 :(得分:0)

从wros的WCF4中摘录“所有这些内置绑定都是基于适用于特定场景的标准,但也可以选择错误或效率较低的一个。所以你如何选择一个是适合你?

如果您需要与非WCF应用程序进行交互,那么最明显的决定是什么。如果您的服务是与WCF客户端通信,那么您可以使用前缀为“net”的绑定。请记住,您可以为使用不同绑定的同一服务定义多个端点。这允许您利用WCF客户端的性能优化,但仍然支持ASMX服务和WS- *标准。这些提供了进一步的安全性和许多客户利用的其他功能。

例如,如果要建立WCF到WCF通信,选择带有二进制编码的NetTcpBinding会使BasicHttpBinding与文本编码的通信速度提高四到五倍。

这些WCF提供的绑定应该涵盖您需要的大多数情况:但是,如果您需要更改或创建完全绑定,WCF允许您非常简单地执行此操作“