wsHttpBinding中的IOutputSessionChannel和IInputSessionChannel,为什么它不起作用?

时间:2009-02-25 01:16:32

标签: wcf

有人知道为什么这段代码的输出只是:“Message Sended”? 输入通道的线程在channel.Recieve()。

上等待

我使用带有IRequest / ReplyChannel的basicHttpBinding没有这个问题!

    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();
    }

解决方案 关闭频道上的安全性,然后将消息版本更改为Soap12Adressing10

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

谢谢,

1 个答案:

答案 0 :(得分:1)

以下是一个快速推测:安全可能会妨碍。我认为默认情况下WSHttpBinding是安全的。尝试关闭安全性。如果这样做有效,那么使其与安全性一起工作的下一步是使用BindingParameters指定“action”是此频道上的Messages的合法操作之一。