0

我一直在研究 VB.net 中的网络技术,特别是应用程序 A 向应用程序 B 发送数据的最佳方式。

根据我的研究,我遇到了几个选项,我决定使用基本 HTTP 协议来使用 WCF - 我昨晚花了几个小时来调整我的内部服务器 IIS 配置并创建一个测试 WCF 应用程序以通过和然后在我的应用程序中使用它,一切似乎都没有错误。(虽然我和 DNS 有一段时间的内部斗争......)

我现在将尝试收集系统信息,简单的信息,如计算机名称、操作系统、正在运行的服务等 - 但是我想每隔 x 时间做一次。

现在我向你们提出的问题是:WCF 是否足以支持定期收集数据,然后通过 IIS 将其推出以供应用程序 B 接收。

示例工作流程:

  1. 应用程序 A (WCF 服务) - 运行函数以在 15 分钟计时器上收集系统信息。
  2. 这是通过中央 IIS 服务器推出的
  3. 应用程序 B (对应用程序 A 中的 WCF 服务的引用) - 在标签上显示应用程序 A 的输出(例如)

WCF 服务是否支持我提到的内容?这是每 15 分钟运行一次的功能吗?

如果我了解 WCF 服务的主要思想,那就是您可以在 WCF 服务中创建函数,您可以将其用作远程应用程序的参考,尽管我查看的示例代码会生成静态数据。

我想的越多,我认为答案就越简单,在我看来,我在说“当然我可以添加一个计时器或其他东西来重新加载功能(甚至是服务),当然当我的应用程序使用引用来提取将要更新的数据。

关键说明:

  • 数据流的安全性不是问题。
  • 资源使用是一个因素。

感谢您的意见和建议。

4

3 回答 3

3

除了 Mikes 不错的答案之外,我还可以为您指出两个资源。1:上一个关于使用 WCF 向其他应用程序发送数据的问题 将数据从 WCF 服务推送到网站 2:XSockets 和 SignalR 之间的比较表http://xsockets.net/xsockets-vs-signalr。底线有两件事......第一。你需要 .net 4.5 和 IIS8 和 win8/2012server 来获取 websockets。第二。XSockets 有状态控制器 SignalR 没有。第一个条件显然对 SignalR 不利,另一个取决于您构建的内容。

于 2013-10-31T17:58:52.647 回答
2

我会说 WCF 不是一个好的选择。根据您的描述,在 WCF 术语中,您希望将信息从服务器推送到客户端。这与大多数 WCF 服务的工作方式相反。通常,通信是从客户端发起到服务器的。

可以通过使用双工服务的 WCF 来完成,但相对复杂。

一个更简单的解决方案是使用像 web sockets 这样的服务器推送解决方案。在 .Net 中有一个来自 Microsoft 的实现,称为 SignalR

http://www.asp.net/signalr

和(至少一个)称为 XSockets 的其他实现

http://xsockets.net/

这两种实现都非常简单易用。

实施如下:

  1. 通知“集线器”将托管在 IIS 中
  2. 数据的定期收集将在 Windows 服务中完成,或者仅使用 Windows 计划任务完成。这将收集数据并将其推送到集线器
  3. 客户端将在中心注册以获取更新,并在服务推送它们时接收它们

在我看来,这将比 WCF 解决方案更容易实现。

它会很好地与

  1. 多个应用程序收集数据并发送到集线器
  2. 多个应用程序从集线器获取数据
  3. 所有发送数据的应用程序都关闭的情况(只要集线器仍在运行)
  4. 所有接收数据的应用程序都被关闭的情况

显示应用程序不需要是 WCF 客户端 - 它可以是使用 JavaScript 访问集线器的浏览器。或者,如果您愿意,也可以是 WCF。或者您可以同时支持浏览器和 Windows 客户端。

此外,它将优化您的网络负载和服务器工作负载,因为它可以避免任何轮询。当有新东西可用时,接收数据的应用程序将收到通知,而无需询问。

一个潜在的缺点是您必须拥有 .Net 4 或 4.5。对于 XSockets,显然有一个非公开的 .Net 2 版本,但 NuGet 包是 .Net 4。

ps

数据流的安全性始终是一个问题:o)

于 2013-10-31T16:08:26.073 回答
1

我会转换服务和客户的角色。因为您似乎想要在各种客户端上进行数据收集,所以您不想经历在每个客户端上设置和托管 WCF 服务的麻烦。

相反,编写一个 WCF 服务,在 IIS 服务器上侦听客户端发送的定期系统信息消息。

然后,您可以创建一个将状态消息发送到此 WCF 服务的客户端。例如,这可以是计划的控制台应用程序或 Windows 服务。您在要监控的每台服务器上安装此客户端,您唯一需要配置的是中央 WCF 服务的 URL。

此 WCF 服务依次将消息写入 SQL Server 等数据存储。现在,当您想从监控应用程序访问记录的消息时,请公开另一个返回消息列表的服务方法。

您可以使用来自任何客户端(例如网站或 WPF/WinForms 应用程序)的报告状态消息列表,只需调用服务即可。

于 2013-10-31T16:01:29.690 回答