Мне нужно динамически использовать службу wcf, когда все, что я знаю, это ее URL-адрес. У меня нет возможности создать ссылку на службу или веб-ссылку, поскольку мой код на стороне клиента получает URL-адрес из файла конфигурации. Какие классы и методы я могу использовать для этого из пространства имен System.ServiceModel.
Как использовать службу wcf, когда я знаю только ее URL
Ответы (2)
Если у вас нет интерфейса службы, вы должны, по крайней мере, иметь представление о том, как выглядят сообщения, ожидаемые сервером; иначе это будет очень сложно сделать :)
Но, безусловно, есть способ сделать это. Вы можете начать с создания необработанного сообщения, которое сервер ожидает в качестве входных данных, и создать его в объекте 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);
Если вы знаете контракт, вы можете сделать что-то вроде:
using (WebChannelFactory<IService> wcf = new WebChannelFactory<IService>(new Uri("http://localhost:8000/Web")))
Подробнее здесь