2013-04-07 73 views
0

我有一個服務,並驗證使用「netstat -anb」,當服務運行時,它正在偵聽正確的端口(8040)。服務合同包含以下合約:WCF代理調用沒有註冊到服務器?

[OperationContract] 
    bool RegisterPlayer(); 

服務類本身實現明確的合同:

bool IMechService.RegisterPlayer() 
    { 
     if (P1 != null) 
     { 
      P1 = OperationContext.Current.GetCallbackChannel<IMechServiceCallback>(); 
      return true; 
     } 
     else if (P2 != null) 
     { 
      P2 = OperationContext.Current.GetCallbackChannel<IMechServiceCallback>(); 
      return true; 
     } 
     return false; 
    } 

而且SvcUtil工具生成的代理創建以下方法:

public bool RegisterPlayer() 
{ 
    return base.Channel.RegisterPlayer(); 
} 

此代碼嘗試生成代理並調用該方法。我試着用DuplexChannelFactory和SvcUtil工具生成的代理類兩者,均可以得到同樣的結果:

client = new MechServiceClient(new InstanceContext(this)); 
//client = DuplexChannelFactory<IMechService>.CreateChannel(this, new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8040/MechService")); 
client.RegisterPlayer(); 

代碼執行到達代理類RegisterPlayer,但進入到超時,從來沒有在服務上運行RegisterPlayer 。不幸的是,因爲它只是超時,我沒有得到任何例外或錯誤來幫助指出在哪裏尋找問題。到目前爲止,我已驗證服務正在運行,似乎正在使用「netstat -anb」在端口8040上偵聽,並且我確定mex端點正在按預期工作併發布元數據。我關閉了Windows防火牆。我還用更簡單的實現創建了一個單獨的測試項目,以驗證我正確執行了這些步驟,並且更簡單的測試項目正常工作。我對於導致這種失敗的原因不知情,任何建議都不勝感激。

+0

您是否嘗試過消息日誌記錄:http://msdn.microsoft.com/en-us/library/ms731859.aspx – 2013-04-07 22:46:02

回答

0

Andrew對日誌記錄的建議很有幫助,基本上它是將我的OperationContracts聲明爲isoneway = true。

0

您是否嘗試過將ConcurrencyMode設置爲ConcurrencyMode.Multiple

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] 
class MechServiceImpl : IMechService 
{ 
    // .. 
} 

默認併發模式用於服務是ConcurrencyMode.Single,這可能會導致與回調的併發症。

+0

它被設置爲可重入,但多個似乎沒有做出更改。 – 2013-04-07 22:36:07

相關問題