Question

Marché de services:

[ServiceContract(CallbackContract = typeof(IClientCallBackChannel),
SessionMode = SessionMode.Required)]
 public interface IServerService
 {
     [OperationContract(IsOneWay = true)]
      void foo();
 }

Contrat client:

public interface IClientCallBackChannel
{
    [OperationContract(IsOneWay = false)]
    object DoCommand(Command command);
}


class ClientCallBackChannelImpl
{
    public object DoCommand(Command command)
    {
        // freezes service
        serverService.foo();

        // OK
        new Action(() =>
        {
             Thread.Sleep(1000);                          
             serverService.foo();                                          
        }
            ).BeginInvoke(null,null);

     }            
}

J'ai un service duplex et quand je fais appel une méthode client « DoCommand » que dans cette méthode, il est un appel à une méthode de service foo, mes gels de service. Si je l'appelle foo de manière asynchrone il fonctionne très bien, mais je dois l'appel à être synchrone.

Était-ce utile?

La solution

Je pense que le problème est que vous avez besoin du DoCommand pour retourner une valeur et donc ne sont pas en mesure de le faire à sens unique. Si vous pensez à ce sujet, cela doit bloquer votre service.

Vous pouvez définir ConcurrencyMode de votre ServiceBehavior à plusieurs et cela devrait fonctionner, mais à mon humble avis ce n'est pas la meilleure option.

Comme vous avez un essai de communication bidirectionnelle coller à OneWay-Méthodes -. Cela va résoudre le problème et vous éviter des problèmes de concurency difficiles avec ce qui précède le comportement mentionné

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top