我正在處理兩個應用程序,其中一個具有一個自我託管的服務,該服務被配置爲使用net.tcp綁定。該服務的ServiceBehaviorAttribute配置有:WCF:EndpointNotFoundException運行幾秒後
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,
InstanceContextMode = InstanceContextMode.Single,
IncludeExceptionDetailInFaults = true,
UseSynchronizationContext = false,
ValidateMustUnderstand = false)]
對於這兩種,服務和客戶端的transferMode被設置爲流式傳輸,並且超時是:
closeTimeout="00:01:00"
openTimeout="00:00:30"
receiveTimeout="00:02:30"
sendTimeout="00:02:30"
MaxConnections最大被設置爲500和ServiceThrottlingBehavior用途的WCF 4的默認值:
- MaxConcurrentSessions:100 * ProcessorCount
- MaxConcurrent調用:16 * ProcessorCount
- MaxConcurrentInstances:default是上述兩項的總和,它們遵循與之前相同的模式。
我正在使用四核計算機並啓用了Net.Tcp端口共享服務。
客戶端應用程序具有使用ChannelFactory類創建的服務的單個通道。一旦通道創建了100個線程。每個線程使用該通道以每秒一條消息的頻率向服務器發送消息。
幾秒鐘運行確定後(客戶端將消息發送到服務器的它正確地接收它們)的EndpointNotFoundException拋出以下消息:
Could not connect to net.tcp://localhost/service. The connection attempt lasted
for a time span of 00:00:02.1777100. TCP error code 10061: No connection could
be made because the target machine actively refused it 127.0.0.1:808.
怪異的事情是:
- 如果我在同一臺機器上運行這兩個應用程序,異常的時間跨度約爲2秒,但是如果我在我的機器上運行服務器應用程序,而在另一臺機器上運行客戶端應用程序,則異常的時間跨度總是爲1秒。
- 有些時候(比如十分之一)異常不會拋出,兩個應用程序都可以正常工作。
- 在拋出異常之前,服務器接收消息並正確處理它們。服務器中不會引發異常。
我做了大量的測試,減少線程數量,增加它,改變關閉,打開,接收和發送超時值到更低和更高的值,爲maxConnections設置更高的值,但結果始終是同樣,在某個時候EndpointNotFoundException被拋出。我即將放棄並更改代碼,以便每個線程都有自己的頻道,希望能夠解決這個問題,但我想知道爲什麼會發生這種情況。如果有人知道我做錯了什麼,或者可以指向正確的方向繼續調查,那將會很有幫助。
什麼是這兩個應用程序的端口:
來自?您是否嘗試過[運行跟蹤](http://stackoverflow.com/a/9897291/151445),或者檢查了端口預留?您還可以運行[tcpview](http://technet.microsoft.com/en-us/sysinternals/bb897437)並監視這兩個應用程序的tcp連接。 – 2012-04-12 14:48:57
用於這兩個應用程序的端口是默認的net.tcp端口,808.我將嘗試tcpview應用程序來監視連接,謝謝! – Diego 2012-04-12 14:55:22
默認情況下,Windows不啓用端口共享。我會檢查你是否啓用了它([見這裏](http://msdn.microsoft.com/en-us/library/ms734772.aspx))。如果可能的話,你也可以嘗試改變一個應用程序的端口,或者在一個虛擬機中測試一個。 – 2012-04-12 15:28:15