Как создать динамическое клиентское прокси-соединение, когда тип неизвестен? - PullRequest
1 голос
/ 19 февраля 2009

Я знаю, что могу сделать что-то вроде следующего кода для динамического создания подключения конечной точки клиента в WCF:

BasicHttpBinding basic = 
    new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly); 

basic.Security.Transport.ClientCredentialType = 
    HttpClientCredentialType.Ntlm; 

EndpointAddress serviceAddress = 
    new EndpointAddress("http://whatever/service.svc"); 

YourServiceClient m_client = new YourServiceClient(basic, serviceAddress);

Проблема в том, что в этом случае мне нужно знать, что такое YourServiceClient. То, что я хочу сделать, это получить тип YourServiceClient из БД, где он хранится как объект. Кто-нибудь знает, как бы я поступил так? Где у меня есть значение YourServiceClient в объекте, который я извлек из БД?

Ответы [ 3 ]

0 голосов
/ 19 февраля 2009

Вы не сможете сделать это. По сути, вы просите получить неизвестное во время выполнения, но при привязке к известному типу во время компиляции. Этого просто невозможно сделать, если службы, к которым вы пытаетесь получить доступ, имеют какой-то общий интерфейс.

Если у них один и тот же интерфейс (имеется в виду, тот же набор методов и т. Д. И т. Д.), То вы можете использовать приведенный здесь пример для создания собственной фабрики каналов во время выполнения и получить прокси-сервер, реализующий интерфейс для службы :

http://msdn.microsoft.com/en-us/library/ms734681.aspx

0 голосов
/ 23 февраля 2011

Если у вас есть возможность использовать дженерики здесь (а если нет, то вам, возможно, придется использовать какое-то отражение, если нет), тогда вам это нужно?

public TContract GetService<TContract>(EndpointAddress address){
    var channelFactory = new ChannelFactory<TContract>(new NetTcpBinding(),address);
    return channelFactory.CreateChannel();
}
0 голосов
/ 19 февраля 2009

Николас Аллен рассказал (как мне кажется) что-то подобное в своем блоге, начните с part 1

Существует также IIRC, возможность просто получать необработанное XML-сообщение, которое затем вы можете обрабатывать самостоятельно, а не работать с прокси-сервером определенного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...