2011-06-10 64 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)。