1.我的服务在控制台应用程序上,我的客户端在 Windows 应用程序上。
2.服务有合同,我的客户有回调合同。
当客户端激活服务上的方法并且该方法激活客户端的回调但该方法未执行时,就会出现问题!最大的震惊是当客户端在控制台应用程序上时,回调是在相同的情况下执行的。
服务合同进出口:
[ServiceBehavior(
InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple,
IncludeExceptionDetailInFaults = true
)]
public class ServerContractImplementation : IServerContract
{
private void NotifyOnDownloadAsync(int TorrentID, int ClientID)
{
...
IClientCallBackContract ICCC = this.ConnectedClients.Single(ConnectedClient1 => ConnectedClient1.Key.ClientID == ClientID).Value;
ICCC.AddSeeders(TorrentID, Seeders);
...
}
}
客户端的回调合约 imp:
[ServiceBehavior(IncludeExceptionDetailInFaults=true)]
internal class ClientCallBackContractImplementation : IClientCallBackContract
{
public void AddSeeders(int TorrentID, IEnumerable<ReplacementObjects.Client> Clients)
{
....
}
}
相同的代码适用于客户端控制台应用程序,但不适用于客户端 Windows 应用程序。