如何使用来自远程服务器的 net.tcp 端点 ping 或检查 WCF 服务的状态?

Posted

技术标签:

【中文标题】如何使用来自远程服务器的 net.tcp 端点 ping 或检查 WCF 服务的状态?【英文标题】:How to ping or check status of WCF service using net.tcp endpoint from remote server? 【发布时间】:2011-09-12 16:49:48 【问题描述】:

我真的来自Http 的世界,从来没有对使用 TCP 的旧 .NET Remoting 做过很多,但我了解 TCP 概念,现在已经使用 net.tcp 绑定实现了几个 WCF 服务。年。大多数时候它是启动,运行,我消费它,故事结束。但是,有时服务器设置更高级,我会遇到一台服务器上存在的通信错误,而另一台服务器可能不存在。证明它是否是防火墙/服务器/等。问题我需要查看是否可以毫无问题地看到或访问 WCF 服务。这是针对使用 net.tcp 的 Windows 服务托管的 WCF 服务,我试图找出这种情况。

问题在于通过 HTTP 绑定公开的 WCF 服务,我只需在浏览器中插入 URI 即可查看服务页面,让我知道服务正在正常运行。轻松测试。

如何对通过 net.tcp 绑定公开的 WCF 服务执行等效操作?是否有任何工具或命令可以用来测试例如 net.tcp//mycustomWCFService:8123/MyService ?我看过一些关于编写代码以编程方式确定 WCF 服务是否可用的帖子,但我不想这样做。我想检查是否所有可能的 没有 代码,类似于我在浏览器中拉起 http 端点。

感谢您的帮助,谢谢!

【问题讨论】:

我也想解决同样的问题。我不确定WC服务是否正在运行? 【参考方案1】:

如果您的服务实现了元数据端点(通常命名为 mex 并嵌套在主体端点下方,在这种情况下使用 mexTcpBinding 实现),您可以使用 Visual 提供的 svcutil 命令行实用程序“ping”它工作室。例如,

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

如果它引发错误,则您的服务(可能)已关闭。如果它成功了,你(很可能)在做生意。正如前面的括号所示,这是一个近似值。这意味着该地址有一个侦听器,并且它能够为元数据请求提供服务。

【讨论】:

如果我在未安装 Visual Studio 的远程服务器上,是否仍会安装 svcutil.exe 实用程序? 不,它不会,但我知道它没有任何依赖关系,只要您可以将其复制到您将从事业务的远程服务器。 我想我可以使用代码和一个使用 svcutil.exe 作为依赖项的小型 WinForms 应用程序来封装调用,以最大限度地简化这一过程。谢谢你的建议。享受额外的50分!!! 您还有其他选择吗?我正在查看一个非常受限的服务器,我无法安装任何东西 要使用此命令,您需要在环境变量中附加PATH,检查答案***.com/questions/6420354/…【参考方案2】:

我发现至少可以查看它是否正在侦听的另一种方法是在已安装的服务器上发出以下“netstat”命令(从命令提示符):

netstat -ona |找到“8123”

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

对于 IIS 托管站点来说是个好主意,最初只使用你提到的 net.tcp 绑定,但对于我的场景,我更多地是在使用 net.tcp 托管在 Windows 服务中的 WCF 服务.我编辑了 OP 以包含此信息。【参考方案4】:

您也可以使用 telnet 客户端程序来发现监听端口,即 telnet url or IP port。要检查网站是否已启动.. 'telnet www.godaddy.com 80' 最初应该产生一个空白窗口,如果没有命令跟随,则随后会出现请求超时响应 (400)。

【讨论】:

以上是关于如何使用来自远程服务器的 net.tcp 端点 ping 或检查 WCF 服务的状态?的主要内容,如果未能解决你的问题,请参考以下文章

天蓝色服务结构 wcf 端点地址 net.tcp 而不是 http

wsFederationHttpBinding over net.tcp

在 WCF 的添加服务引用中找不到 net.tcp 端点?

仅对来自远程端点的响应起作用的 Servlet 过滤器“代理”

WCF Net.tcp 仅在本地失败

是否可以在同一端口上的 HTTP 中创建另一个端点?