WCF绑定-这么多!我该怎么选择呢?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

我们有一个R服务器 (R是用于统计分析的编程语言),它基本上采用脚本和csv文件,处理一些数据并将结果作为文本返回。

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

我对可用的许多不同的绑定感到困惑,网络上的信息似乎对于选择什么来说是稀疏/分散的。

另外,最好是在IIS中运行服务,或者作为一个单独的“命令行”类型监听器服务(后者看起来与IIS相比很丑陋,我不知道为什么有人会选择这样做,如果他们可以在IIS中运行它)?

提问于
用户回答回答于

就个人而言,我会推荐最简单的绑定,以提供所需的。我已经完成了很多WCF(一些非常复杂),并且我从来不需要使用BasicHttpBinding以外的任何东西; 这也可以实现与非.NET客户端的最大可能的兼容性,并且允许使用MTOM之类的功能进行高效的二进制传输。

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

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

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

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

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

用户回答回答于

确实有很多选择。

捆绑

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

在选择绑定时,需要从中找出您需要的功能。例如,你可能需要一种方法来

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

如果知道客户端始终来自dot net,则可以使用net tcp binding,这比basicHttpbinding快。然而,basicHttpBinding是一个可互操作的协议,即使是php或java客户端也可以毫无问题地与之交谈。

定义自己对服务的需求,然后查找现有绑定以适应您的需求,如果没有任何现有绑定,则可以创建自己的绑定(称为自定义绑定),它可以将来自不同绑定的功能组合起来以实现的目标。

主机

IIS更具可扩展性。如果服务不需要在长时间运行的守护进程(Windows服务或控制台应用程序)中托管的状态,则IIS是选择,因为可以轻松地为服务启用压缩和加密。

更多关于绑定

如果你想让你的服务在浏览器中被调用,例如javascript WebHttpBinding是一个为你定义的dot net。可以使用enbableWebScript使服务理解JavaScript的JSON。

可用性

如果一个特定的绑定不能满足所有的要求,你可以在不同的端点上以不同的绑定公开每个服务。例如host/soap host/nettcp host/json

扫码关注云+社区