Как использовать службу wcf, когда я знаю только ее URL

Мне нужно динамически использовать службу wcf, когда все, что я знаю, это ее URL-адрес. У меня нет возможности создать ссылку на службу или веб-ссылку, поскольку мой код на стороне клиента получает URL-адрес из файла конфигурации. Какие классы и методы я могу использовать для этого из пространства имен System.ServiceModel.


wcf
person Addi    schedule 01.10.2008    source источник


Ответы (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);
person tomasr    schedule 01.10.2008

Если вы знаете контракт, вы можете сделать что-то вроде:

using (WebChannelFactory<IService> wcf = new WebChannelFactory<IService>(new Uri("http://localhost:8000/Web")))

Подробнее здесь

person Rinat Abdullin    schedule 01.10.2008
comment
Это требует, чтобы клиентская сторона знала интерфейс IService. - person Addi; 01.10.2008