2010-05-06 52 views
2

我有一個啓動時執行以下操作的Windows服務。當通過控制檯應用程序運行時,它工作正常,但是一旦我放入Windows服務,我會得到下面的異常。以下是我迄今爲止嘗試:SocketException阻止在Windows服務中使用C#TCPListener

  • 禁用防火牆,也嘗試添加明確排除的exe文件,端口和協議
  • 經過CAS策略配置,顯示不受限制的權利
  • 配置的服務來以管理員身份運行帳戶,本地系統,本地服務和網絡服務,每個都有相同的結果
  • 嘗試不同的端口
  • 也試過127.0.0.1剛剛看到...同樣的問題

這衝倒我的頭,所以任何幫助,將不勝感激:

驗證碼:

var _listener = new TcpListener(endpoint); //192.168.2.2:20000 
_listener.Start(); 

由此導致的異常:

Service cannot be started. System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions 
    at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) 
    at System.Net.Sockets.Socket.Bind(EndPoint localEP) 
    at System.Net.Sockets.TcpListener.Start(Int32 backlog) 
    at System.Net.Sockets.TcpListener.Start() 
    at Server.RequestHandler.StartServicingRequests(IPEndPoint endpoint) 
    at Server.Server.StartServer(String[] args) 
    at Server.Server.OnStart(String[] args) 
    at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state) 
+0

您能告訴我們您用來配置端點的代碼嗎? 這裏有更多的信息,但我不知道它會幫助你 http://support.microsoft.com/kb/819124 – TimothyP 2010-05-06 09:42:04

+0

當然,端點設置使用「新IPEndPoint(IPAddress.Parse(args [0] ),Convert.ToInt32(args [1]))「。這些參數通過服務控制面板傳入,並且我確認本地計算機的IP地址設置爲192.168.2.2,端口設置爲20000,儘管我也嘗試了其他端口。 – JoeGeeky 2010-05-06 09:59:28

+2

你在運行什麼操作系統? .NET框架的哪個版本?另外,你可以確保沒有內核模式或用戶模式進程綁定到該端口(netstat -n -a -P TCP)嗎? – feroze 2010-05-06 17:16:48

回答

5

我建議您綁定到與端點IPAddress.Any(0.0.0.0)和一個特定的端口。

錯誤消息可能是因爲另一個應用程序已經打開了該端口或最近打開了該端口exclusively

+0

謝謝,我會試試 – JoeGeeky 2010-05-11 18:53:54

+0

IPAddress.Any實際上是0.0.0.0 – Tarnschaf 2011-05-12 09:46:21

+0

你當然是對的!我不知道爲什麼我把廣播價值,而不是任何價值... – 2011-05-12 13:59:34

0

有關錯誤代碼的更多信息是on MSDN