我们有一个R服务器 (R是一种用于统计分析的编程语言),它基本上采用脚本和csv文件,处理一些数据并将结果作为文本返回.
我需要在R服务器上编写一个服务,以便.net客户端(可能是.Net Windows Forms或ASP.Net)可以连接到R服务器,提交脚本和CSV文件,然后返回结果.
我对可用的许多不同的绑定感到困惑,网络上的信息似乎很稀疏/分散于选择的内容.
另外,最好是在IIS中运行服务,还是作为单独的"命令行"类型监听器服务(后者看起来比IIS更难看,我不知道为什么有人会选择这样做,如果他们可以在IIS中运行它)?
就个人而言,我建议最简单的绑定,以满足您的需求.我做了很多WCF(有些非常复杂),我从来没有使用过BasicHttpBinding以外的任何东西; 这也允许与非.NET客户端最大可能的兼容性,并允许您使用MTOM之类的东西进行有效的二进制传输.
重新托管; IIS对于客户端/服务器设置来说确实是最简单的; 两个特别的优势:
易于配置SSL(即您只需配置IIS,WCF将使用它)
易于负载平衡(只需负载平衡您的Web场)
(我相信运行在BasicHttpProfile上的WCF也可以利用你的IIS压缩[GZip/Deflate]设置,但是不要引用我......)
如果(例如)您需要长时间运行的有状态服务器,则可以选择使用独立主机(通常通过Windows服务).IIS有这种习惯(按设计)回收应用程序池,如果你在内存中保留一些内容,那就不好了!另一个例子是你希望它已经运行以获得快速的"第一次"命中性能(而不是等待IIS/ASP.NET启动).涵盖这两者的示例可能是托管WF(工作流)服务器.
再次; 如果您不需要这种复杂性,请选择最简单的选项:在IIS中托管.
确实有很多选择.
捆绑
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
我建议参考Juval Lowy的"编程WCF服务"一书.
他通过决策图表来帮助您决定使用哪种绑定.你也可以在这里找到他关于绑定的文章
http://www.code-magazine.com/article.aspx?quickid=0605051&page=3