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