有人知道为什么这段代码的输出只是:“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
谢谢,
答案 0 :(得分:1)
以下是一个快速推测:安全可能会妨碍。我认为默认情况下WSHttpBinding是安全的。尝试关闭安全性。如果这样做有效,那么使其与安全性一起工作的下一步是使用BindingParameters指定“action”是此频道上的Messages的合法操作之一。