公开网络客户端可以调用的API

时间:2015-02-04 08:38:11

标签: .net wcf architecture asp.net-web-api

背景信息:我有几台嵌入式设备通过RS232连接到计算机。在这台计算机上,我将创建一个程序,它可以控制这些设备,向各个设备发送命令以更改其配置或检索给定时间跨度的记录数据等。

我希望此程序中的所有功能也可供网络上的其他计算机使用。对于"概念证明"我使用诸如

之类的函数创建了一个简单的WCF服务
void SetTime(string comPort, DateTime time)
DateTime GetTime(string comPort)
List<string> GetSensors(string comPort)
List<LoggedValue> GetLoggedData(string comPort, string sensorName, DateTime start, DateTime stop)
void RestartDevice(string comPort)

我喜欢WCF的原因是您可以在Visual Studio中自动为服务创建代理类,并且可以直接使用服务中定义的自定义类,例如LoggedValue

但是,我看到许多声称WCF过于复杂且开销很大,并且asp.net web API(或mvc web API 2或其他任何名称)是创建API的方法。简单的调用(简单的HTTP请求)和低开销。虽然我同意这两点,但我觉得你在WCF中使用强类型类失去了很多优点。

此外,我发现&#34; CRUD&#34; - 操作并不总能很好地转化为我想要做的所有事情;我将永远不会执行任何CreateDelete操作,唯一的Update将更改配置值,例如设置记录间隔。在API中调用不会返回值的函数(例如void RestartDevice(string comPort))对于web api来说似乎也不自然(你会怎么做?)

由于我对这两种技术都没有太多的经验,哪种方向似乎最自然?这不是许多客户端访问的服务,请求率非常低。

2 个答案:

答案 0 :(得分:1)

我同意WebAPI 稍微更容易实现。我已经使用WCF近10年了,WebAPI已经使用了大约3年,我发现自己现在很少使用WCF。使用HttpClient消费WebAPI也非常简单。

我不相信你需要过分担心自己最终会选择哪种技术堆栈。这两种技术都支持您对RPC或命令式操作的要求,它们都受到良好支持,易于使用,并且具有大致相同的管理开销。

我同意您的分析,即您的设备操作合同不易表达为一组RESTful操作,因此如果您选择WebAPI,请忽略verbage周围的所有conventions(GET,PUT)等等),只需对所有命令使用POST。

答案 1 :(得分:0)

如果你正在做概念证明,你也可以尝试使用NetMQ。它是ZermMQ的.NET端口,为方便起见,有一个nuget包。

当然,WCF是一个很好的灵活解决方案。根据您的通信策略,您可能会发现发布/订阅或广播模型允许您执行无法使用Web API执行的操作。