【问题标题】:Expose an API that network clients can call公开网络客户端可以调用的 API
【发布时间】:2015-04-03 17:02:01
【问题描述】:

上下文:我有几个嵌入式设备通过 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 中强类型类的很多优势。

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

由于我对这两种技术都没有太多经验,因此哪个方向看起来最适合使用?这不是一个会被很多客户端访问的服务,请求率会很低。

【问题讨论】:

  • 视情况而定。 WCF 仍然是要走的路,因为它为您提供了诸如合同绑定、要使用的协议等选项......其中 WebAPI 只是真正用于客户端 JSON(我认为您也可以更改可以发送的数据类型/receive 但 JSON 是主要的)HTTP 调用......这很好,并且真正针对移动世界比什么都重要。考虑到开发人员可以用它做的事情,WCF 仍然是恕我直言的方法。

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


【解决方案1】:

我同意 WebAPI 稍微更容易实现。我使用 WCF 近 10 年,使用 WebAPI 大约 3 年,我发现自己这些天很少使用 WCF。使用 HttpClient 使用 WebAPI 也非常简单。

我认为您无需担心自己最终会选择哪种技术堆栈。这两种技术都支持您对RPC 或命令式操作的要求,两者都得到很好的支持,易于使用,并且具有大致相同的管理开销。

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

【讨论】:

  • 感谢您的链接和输入。将检查 RPC 的做事方式,而不是将其限制为 REST。将 API 限制为 REST 调用主要是让我无法使用 WebAPI。
【解决方案2】:

如果您正在做概念证明,不妨试试NetMQ。它是 ZermMQ 的 .NET 端口,为了方便起见,有一个可用的 nuget 包。

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

【讨论】:

  • 也很有趣,因为我可能想向所有客户端推送更新。为此考虑 SignalR 或 WCF 双工服务。
猜你喜欢
  • 1970-01-01
  • 2018-02-19
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多