【问题标题】:Exposing Windows Service through WCF通过 WCF 公开 Windows 服务
【发布时间】:2010-04-19 19:45:02
【问题描述】:

我已经创建了一个 Windows 服务来监控网络中的某些特定流量。我现在需要为该服务创建一个用户界面,以便可以实时监控流量,以及更改服务设置的能力。

不幸的是,我被困在如何使用我的工作服务,并通过 WCF 公开/转换它。

我什至不知道从哪里开始。

谢谢

编辑:嗯,我已经通过 WCF 公开了一些方法,这一切看起来都可以在必要时工作。

一旦我意识到 ServiceHost 构造函数可以接受一个实例,而不仅仅是一个类型,这真的一点都不难,因为完成这项工作的类没有无参数构造函数。

【问题讨论】:

  • MSDN 始终是一个不错的起点:msdn.microsoft.com/en-us/netframework/aa663324.aspx,当您有特定问题时,stackoverflow.com 是一个不错的起点。
  • 更具体地说,我需要做的是通过 UI 更改服务正在侦听的端口。我目前编写了一个小型 UI 应用程序,可以使用 ServiceController 启动/停止服务。我现在需要一种使用新端口号调用服务中的方法的方法。它不一定是 WCF,但它必须是一种将数据传递给服务的方法。

标签: wcf windows-services


【解决方案1】:

好吧,老实说,我不会走通过 WCF“公开”您的服务的路径。

我的建议是:

  • 保持当前收集和监控流量的服务不变
  • 将您可能希望向其他人公开的数据存储到合适的持久存储(例如数据库)中
  • 创建一个单独的 WCF 服务(托管在第二个 Windows NT 服务或 IIS 中),允许外部消费者获取您收集的数据

鉴于您当前的数据,您必须分析您有哪些类型的数据可用,然后您需要决定将哪些数据以及如何向可能对该数据感兴趣的其他人公开这些数据。

  • 如果您选择基于 SOAP 的 WCF 服务,则必须提出一组服务方法(类似于GetDataForTodayGetDataForHour 或无论您想提供什么)。在这种情况下,这是您的第一个任务 - 定义服务方法(您的 服务合同,用 WCF 来说),并定义涉及的数据类型 - 作为服务方法的参数,并作为返回来自这些方法的值(您的数据合同

  • 如果您更喜欢 REST,那么您通常不会谈论方法,而是将数据视为资源 - 例如。您可以将每小时数据集作为资源公开,并使用诸如http://yourserver/YourService/YYYYMMDD/Hour 之类的 URL 导航到它 - 如何定义这些 URL(统一资源标识符 - URI)完全取决于您。每个这样的资源都需要有一个表示形式——一组字段和属性——您通常会将它们公开为 XML 和/或 JSON

借助 WCF 的灵活性,您实际上甚至可以两者兼得——如果您愿意的话。

SOAP 是一种更传统的做事方式——优点是一个文档齐全的接口(你会得到一个 WSDL——Web 服务描述,以及一些 XSD——描述你的数据的 XML 模式),它可以被“发现”并且由人和计算机共同解释。不利的一面是,SOAP 往往有点“重”,您需要一个特殊的 SOAP 客户端/您自己的应用程序才能真正获取数据。

REST 是一种更时髦、更现代的做事方式——您导航到一个 URL,它会返回一大堆尖括号(或 JSON 文档)。它很快,很容易,很棒 - 但它的形式化程度较低,你没有得到任何机器可读的服务描述,真的 - 你需要知道/找出/阅读文档来了解你是什么真正回归以及如何解释它。

唷,这已经是一篇长文了!!基本上 - 我会保留您当前的数据收集服务并让它按原样运行,并考虑如何使用各种单独的 WCF 服务公开/提供它收集的数据。

好的介绍网站是MSDN WCF Developer Center 用于基于 SOAP 的 WCF 方面,MSDN WCF REST Developer Center 用于 WCF 基于 REST 的方面。

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多