16

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

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

我对可用的许多不同绑定感到困惑,并且网络上的信息似乎很少/分散关于选择哪个绑定。

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

4

4 回答 4

10

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

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

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

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

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

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

于 2008-10-26T09:53:37.803 回答
8

确实有很多选择。

捆绑

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

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

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

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

定义自己对服务的需求,然后寻找现有的绑定来满足你的需求,如果没有任何现有的绑定,你可以创建自己的绑定,称为自定义绑定,它可以将不同绑定的特性组合在一起来实现目标。

托管

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

更多关于绑定

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

可用性

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

于 2008-10-26T10:02:29.703 回答
5

我建议参考 Juval Lowy 的《Programming WCF Services》一书。

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

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

于 2008-10-28T23:50:41.433 回答
0

摘自 wros 的 WCF4 一书“所有这些内置绑定都建立在适用于特定场景的标准之上,但如果您选择了错误或效率较低的绑定,它们也可以使用。那么,您如何选择适合您的?

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

For example, if you want to establish a WCF to WCF communication, choosing a NetTcpBinding with a binary encoding akes the communication four or five time faster tan a BasicHttpBinding with text encoding.

These WCF-provided bindings should cover most cases that you need:however, if you need to change or créate an entirely ne binding, WCF allows you do this very simply"

于 2012-02-22T11:22:22.043 回答