当我所知道的是它的URL时,我需要动态地使用wcf服务。我无法创建服务引用或Web引用,因为我的客户端代码从配置文件中获取URL。我可以从System.ServiceModel命名空间中使用哪些类和方法来执行此操作。
答案 0 :(得分:3)
如果您没有服务界面,您至少必须知道服务器期望的消息是什么样的;否则很难做到:)
但肯定有办法做到这一点。您可以从创建服务器期望作为输入的原始消息开始,并在Message对象中创建它(我的意思是System.ServiceModel.Channels.Message)。确保为其设置所有必需的标头,具体取决于您希望用于调用客户端的绑定(例如设置正确的凭据,正确的MessageVersion等)。
然后,您可以使用标准的通用通道形状(如IRequestChannel或IInputChannel(用于单向服务))创建通道工厂,并使用通道工厂创建新通道并调用服务。即类似的东西:
Message input = Message.CreateMessage( .... );
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, endpoint);
IRequestChannel channel - factory.CreateChannel();
Message output = channel.Send(input);
答案 1 :(得分:1)
如果您知道合同,那么您可以执行以下操作:
using (WebChannelFactory<IService> wcf = new WebChannelFactory<IService>(new Uri("http://localhost:8000/Web")))
更多here