WCF绑定 - 这么多!我该选择哪个?

16

我们有一个 R Server(R是一种用于统计分析的编程语言),基本上接受脚本和CSV文件,处理一些数据,并以文本形式返回结果。

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

我被提供给我的许多不同绑定方式搞糊涂了,在网上找到的信息似乎零散而稀少。

此外,最好在IIS中运行服务,还是作为单独的“命令行”类型监听服务运行(后者与IIS相比显得很丑陋,如果可以在IIS中运行,则我不知道为什么有人会选择这样做)?

4个回答

10

个人建议选择最简单的绑定方式,满足需求即可。我做过很多WCF项目(有些非常复杂),但我从未使用除BasicHttpBinding之外的任何东西。该绑定方式还能够与非.NET客户端实现最大可能的兼容性,并且可以使用MTOM实现高效的二进制传输。

关于主机托管; 对于客户端/服务器设置,IIS确实是最简单的选择。它具有两个特点:

  • 易于配置SSL(即您只需配置IIS,WCF将自动使用它)
  • 易于负载均衡(只需负载均衡您的Web farm即可)

(我认为,运行在BasicHttpProfile上的WCF也可以利用您的IIS压缩[GZip / Deflate]设置,但不要引用我……)

如果您想要一个长时间运行的有状态服务器,可以选择使用独立主机(通常通过Windows服务)。 IIS有这种习惯(按设计思路)回收应用程序池,这对于在内存中保留某些内容的情况不好!另一个例子是当您希望它已经运行时以实现快速“首次访问”性能(而不是等待IIS / ASP.NET启动)的情况。一个典型的例子是托管WF(工作流程)服务器。

同样,如果您不需要这种复杂性,请选择最简单的选项:在IIS中进行托管。


1
有趣。对于 .NET 到 .NET 的情况,我知道我不需要考虑与非 .NET 客户端的兼容性,通常使用 TCP 绑定,这似乎是根据流程图正确的选择。http://weblogs.asp.net/spano/archive/2007/10/02/choosing-the-right-wcf-binding.aspx。你的建议肯定是最简单的,但如果你有好的书籍/示例/知道你在做什么,让其他绑定工作并不需要更多的努力。我认为选择 IIS 的理由现在比较弱,因为 Windows 进程激活服务 (WAS) 已经出现了。 - RichardOD

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


5

是的,流程图非常方便。 - RichardOD
这本书也是如此-但不适合初学者。 - RichardOD

0

从wros的WCF4书中提取:“所有这些内置绑定都建立在适用于特定场景的标准上,但如果您选择错误或效率较低的绑定,它们也会起作用。那么,您如何选择适合自己的绑定呢?

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

例如,如果您想建立WCF到WCF的通信,则选择具有二进制编码的NetTcpBinding比具有文本编码的BasicHttpBinding快四到五倍。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接