2011-06-10 63 views
33

我真的来自Http的世界,从来没有做过很多使用TCP的旧.NET Remoting,但我理解TCP概念,现在已经在过去几年中使用net.tcp绑定实现了几个WCF服务。大多数情况下,它正在运行,我正在消耗它,故事结束。然而,有时服务器设置更高级,并且我收到1台服务器上存在的通信错误,可能不是另一台服务器。证明它是否是防火墙/服务器/等。问题我需要看看WCF服务是否可以被看到或没有问题。这是用于使用net.tcp的Windows服务托管的WCF服务,我试图找出这种情况。如何使用net.tcp端点从远程服务器ping或检查WCF服务的状态?

事情是通过HTTP绑定公开的WCF服务,我可以在浏览器中放置URI来查看服务页面,让我知道服务运行正常。简单的测试。

我该如何做一个通过net.tcp绑定公开的WCF服务的等价物?有什么工具或命令我可以用来测试例如net.tcp//mycustomWCFService:8123/MyService?我看过几篇关于编写代码的文章来确定WCF服务是否可用,但我不想这样做。我想做这个检查,如果在所有可能的没有代码,类似于我在浏览器中拉起http端点。

任何帮助表示赞赏,谢谢!

+2

我也想知道解决同类问题。我不确定WC服务是否正在运行? – 2011-07-11 13:50:36

回答

41

如果你的服务实现元数据终结(通常命名为mex和嵌套的主要终点下,使用在这种情况下mexTcpBinding实现),你可以“平”,它使用商提供的与Visual Studio的SvcUtil工具命令行实用程序。例如,

svcutil net.tcp://mycustomWCFService:8123/MyService/mex 

如果它引发错误,您的服务可能(可能)关闭。如果成功,你(可能)在商业上。正如前面的括号里所表明的那样,这是一个近似值。这意味着地址上有一个监听器,并且它能够处理元数据请求。

+1

如果我在未安装Visual Studio的远程服务器上,是否仍会安装svcutil.exe实用程序? – atconway 2011-07-26 14:01:50

+2

不,它不会,但它没有任何我知道的依赖关系,只要您可以将它复制到您将要开展业务的远程服务器即可。 – 2011-07-26 16:42:04

+0

我想我可以使用代码和一个使用svcutil.exe作为依赖项的小型WinForms应用程序来调用,以简化这一点。感谢您的建议。享受额外的50分! – atconway 2011-07-28 13:36:56

3

这样做的一个简单方法是(假设该服务托管在IIS中)以向相同的IIS站点添加HTTP绑定(使用不同的端口!!)并将<serviceDebug httpHelpPageEnabled="true" />添加到服务行为。这样,您可以通过在浏览器中导航到其HTTP URL来轻松检查服务是否已启动。无可否认,这样你只能发现服务是否已启动,例如,你将无法检测到特定TCP端口上的任何网络问题。

如果您还需要解决后一个问题,或者如果无法添加HTTP绑定,则可以在服务协议中添加一个简单的“PING”操作,并使用net.tcp客户端来调用该绑定。

+0

IIS托管网站的好主意最初只使用net.tcp绑定,如上所述,但对于我的场景,我讲的是更多的WCF服务使用net.tcp托管在Windows服务中。我编辑了OP来包含这些信息。 – atconway 2011-07-28 13:32:33

29

的另一种方式,我发现至少看它是否正在监听是在安装服务器上发出以下用“netstat”命令(在命令提示符):

netstat的-ONa |找到“8123”

(是的,这是上述命令中的管道分隔符)。如果返回任何内容,它将主动侦听并托管在搜索的端口上。

0

您还可以使用telnet客户端程序来发现监听端口,即telnet {url或IP} {port}。要检查一个网站是否运行正常,如果没有命令,'telnet www.godaddy.com 80'最初应该产生一个空白窗口,然后是一个请求超时响应(400)。