2010-04-13 79 views
0

我有兩個服務,一個叫另一個。這兩個被標記爲單身如下:如何在沒有掛起的情況下在WCF單例服務中調用WCF單例服務?

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Multiple)] 
public class Service : IService 

我設置這些了一個ServiceHost的如下:

ServiceHost serviceHost = new ServiceHost(singletonElement); 
serviceHost.Open(); 

當父服務試圖調用同一臺機器上的子服務,父服務掛起,等待兒童服務。

我已經在考慮擺脫單身模式,但是我的方法有什麼問題嗎?有沒有解釋這種行爲和解決辦法?

+0

你的意思是WCF服務? – 2010-04-13 19:30:59

+0

對不起,是的。我將編輯該問題 – 2010-04-13 20:52:00

回答

0

問題是我在WPF應用程序中託管並未將UseSynchronizationContext設置爲false。這使得WCF服務在UI線程中成爲主機,從而在有一個服務(在UI線程上)調用另一個服務(也在UI線程上)時導致死鎖。

1

父服務掛起它,因爲可能是因爲子服務方法花費的時間太長。如果需要很長時間才能以異常方式返回,或者在OpearationContract arrtribute中制定子服務方法IsOneWayo=True

單程服務是火&忘記這種稱呼它不會返回任何值。

相關問題