2009-02-25 8 views
0

Est-ce que quelqu'un sait pourquoi la sortie de ce code est seulement: "Message Sended"? Le thread du canal d'entrée attend sur channel.Recieve().IOutputSessionChannel et IInputSessionChannel dans wsHttpBinding, pourquoi cela ne fonctionne pas?

Je n'ai pas ce problème en utilisant basicHttpBinding avec IRequest/ReplyChannel!

static void Main(string[] args) 
    { 
     WSHttpBinding binding = new WSHttpBinding(); 
     binding.ReliableSession.Enabled = true; 
     binding.ReliableSession.Ordered = true; 

     var messsage = System.ServiceModel.Channels.Message.CreateMessage(MessageVersion.Soap11, "hello", "action"); 
     var senderFacto = binding.BuildChannelFactory<IOutputSessionChannel>(); 
     var recieveFacto = binding.BuildChannelListener<IInputSessionChannel>(new Uri("http://localhost:9393")); 

     senderFacto.Open(); 
     recieveFacto.Open(); 

     var sender = senderFacto.CreateChannel(new System.ServiceModel.EndpointAddress("http://localhost:9393")); 
     sender.Open(); 



     sender.BeginSend(messsage, (o) => 
     { 
      sender.EndSend(o); 
      Console.WriteLine("Message Sended"); 
      sender.Close(); 
     },null); 

     recieveFacto.BeginAcceptChannel((o) => 
     { 
      var channel = recieveFacto.EndAcceptChannel(o); 
      channel.Open(); 
      var message = channel.Receive(); 
      Console.WriteLine("Message Recieved"); 
     },null); 

     Console.Read(); 
    } 

Solution Éteignez la sécurité sur le canal, puis changer la version du message à Soap12Adressing10

binding.Security.Mode = SecurityMode.None; //Turn off the security 
var messsage = System.ServiceModel.Channels.Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "hello", "action"); //Change message version 

Merci,

Répondre

1

Voici une spéculation rapide: la sécurité pourrait être de la manière. Je pense que WSHttpBinding est sécurisé par défaut. Essayez d'éteindre la sécurité. Si cela le fait fonctionner, l'étape suivante pour le faire fonctionner avec la sécurité consiste à utiliser BindingParameters pour spécifier que "action" est l'une des actions légales pour les messages sur ce canal.

+0

Grande spéculation! En désactivant la sécurité, une exeption a été lancée par l'expéditeur.BeginSend qui dit d'utiliser la version du message Soap12Adressing10. La désactivation de la sécurité et la modification de la version du message ont résolu le problème. Merci ! –

Questions connexes