2010-04-19 97 views
2

我已经创建了一个windows服务来监视网络的某些特定流量。我现在需要为服务制作一个用户界面,以便实时观看流量,并且可以更改服务的设置。通过WCF公开Windows服务

不幸的是,我坚持我如何把我的工作服务,并揭露它通过/将其转换为WCF。

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

感谢

编辑:嗯,我已经暴露通过WCF的一些方法,这一切看起来像它将作为必要的工作。

这真的是不难的,一旦我意识到ServiceHost的构造函数可以采取一个实例,而不仅仅是一个类型,因为我的类,它所做的工作,没有一个参数的构造函数。

+0

MSDN总是一个很好的开始:http://msdn.microsoft.com/en-us/netframework/aa663324.aspx当你有一个特定的问题stackoverflow.com是一个很好的地方。 – 2010-04-19 19:46:33

+0

更具体地说,我需要做的是通过UI改变服务监听的端口。我目前有一个小的UI应用程序,可以使用ServiceController启动/停止服务。我现在需要一种方法来使用新的端口号在服务中调用方法。它不一定是WCF,但它必须是将数据传递给服务的一种手段。 – CaffGeek 2010-04-20 14:10:22

回答

2

好,坦白地说,我不会通过WCF走“暴露”你的服务的路径。

我的建议是:

  • 留下您当前的服务,收集并监控流量,因为它是
  • 存储中的数据,你可能希望暴露给其他到合适的持续性存储(如数据库)
  • 创建一个单独的WCF服务(在第二个Windows NT服务托管,或在IIS),这将允许外部消费者得到你所收集的数据

鉴于ÿ我们目前的数据,你将不得不分析你有什么样的数据,然后你需要决定什么以及如何将这些数据公开给其他可能对这些数据感兴趣的人。

  • 如果你选择基于SOAP的WCF服务,你必须拿出一套服务方法(沿GetDataForToday线的东西,GetDataForHour或不管它是你要提供)。在这种情况下,这是您的第一个任务 - 定义服务方法(您的服务合同,以WCF的名义发言),并定义涉及的数据类型 - 作为服务方法的参数,以及来自这些方法的返回值你的数据合同

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

随着WCF的灵活性,你实际上可以连做两个 - 如果你希望。SOAP是更传统的做事方式 - 专业人员是一个记录良好的界面(您可以获得WSDL - Web服务描述,以及少量XSD - 用于描述数据的XML模式),这些界面可以被“发现”并由人类和电脑解释。不利的一面是,SOAP往往有点“沉重”,您需要一个特殊的SOAP客户端/您自己的应用程序才能真正获取数据。

REST是一种比较流行和现代的做事方式 - 您浏览到一个URL并且吐出一大堆尖括号(或JSON文档)。它很快,很容易,很好 - 但它不太正式,你没有得到任何机器可读的服务描述,真的 - 有点了解你知道/找出/阅读文档以了解你是什么真的回来了,如何解释它。

唷,这已经成为一个很长的帖子!基本上 - 我会保留当前的数据收集服务并让它按原样运行,并考虑如何使用单独的WCF服务公开/提供收集的数据。

良好的介绍站点是基于SOAP的WCF方面的MSDN WCF Developer Center,以及WCF的基于REST的方面的MSDN WCF REST Developer Center