我有一個服務,並驗證使用「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防火牆。我還用更簡單的實現創建了一個單獨的測試項目,以驗證我正確執行了這些步驟,並且更簡單的測試項目正常工作。我對於導致這種失敗的原因不知情,任何建議都不勝感激。
您是否嘗試過消息日誌記錄:http://msdn.microsoft.com/en-us/library/ms731859.aspx – 2013-04-07 22:46:02