我已经创建了ASP.NET应用程序并为其添加了简单的WCF服务。 ASP.NET应用程序是WCF服务的主机。该服务正在运行。
该服务如下:
[ServiceContract]
public interface IService1
{
[OperationContract]
string DoWork(string text);
}
public class Service1 : IService1
{
public string DoWork(string text)
{
return text.ToUpper();
}
}
在客户端,是应该动态调用WCF服务的控制台应用程序。我使用以下代码:
WSHttpBinding binding = new WSHttpBinding(SecurityMode.None);
IChannelFactory<IRequestChannel> factory = binding.BuildChannelFactory<IRequestChannel>(
new BindingParameterCollection());
factory.Open();
EndpointAddress address = new EndpointAddress("http://localhost:3929/Service1.svc");
IRequestChannel irc = factory.CreateChannel(address);
using (irc as IDisposable)
{
irc.Open();
XmlReader reader = XmlReader.Create(new StringReader(
@"<DoWork xmlns='http://tempuri.org/'>
<composite xmlns:a='http://www.w3.org/2005/08/addressing'
xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
<a:StringValue>aaaa</a:StringValue>
</composite>
</DoWork>"));
Message m = Message.CreateMessage(MessageVersion.Soap12,
"http://tempuri.org/IService1/DoWork", reader);
Message ret = irc.Request(m);
reader.Close();
Console.WriteLine(ret);
}
//close the factory
factory.Close();
但是,它在这一行崩溃了:
Message ret = irc.Request(m);
有以下错误:
传出消息的消息版本(Soap12(http://www.w3.org/2003/05/soap-envelope)AddressingNone(http://schemas.microsoft.com/ws/2005/05/addressing/none))与编码器的消息版本不匹配(Soap12(http://www.w3.org/2003/05/soap-envelope)Addressing10({{3} }))。确保使用与消息相同的版本配置绑定。
有人知道我做错了吗?
提前谢谢。
答案 0 :(得分:1)
Message.CreateMessage(MessageVersion.Soap12,
您需要指定Soap12
以匹配您的绑定,而不是MessageVersion枚举值Soap12Addressing10
。