WCF: Почему не удается передать удаленную конечную точку?

Проблема, с которой я сталкиваюсь при подключении клиентского приложения wcf к хосту, работающему на отдельном компьютере, задокументирована в ранее заданном вопросе:

WCF: почему не удается передать удаленную конечную точку?

Однако в предложенном здесь решении говорится, что вам нужно использовать SpnEndpointIdentity с пустой строкой. Поскольку мой код не похож на тот, на который я ссылался, мне нужно знать, что делать с созданным мной объектом SpnEndpointIdentity.

У меня есть ChannelFactory, на котором я вызываю Create channel, передавая EndpointAddress:

    public override void InitialiseChannel()
    {
        SpnEndpointIdentity spnEndpointIdentity = new SpnEndpointIdentity("");
        var address = new EndpointAddress(EndpointName);

        Proxy = ChannelFactory.CreateChannel(address);
    }

(NB: ChannelFactory имеет тип IChannelFactory, где T - интерфейс контракта на обслуживание) Итак, что мне делать с spnEndpointIdentity? Я не могу передать его CreateChannel.

Или, возможно, я смогу использовать его как-нибудь при создании фабрики каналов:

    private ChannelFactory<T> CreateChannelFactory()
    {
        var binding = new NetTcpBinding
        {
            ReaderQuotas = { MaxArrayLength = 2147483647 },
            MaxReceivedMessageSize = 2147483647
        };

        SpnEndpointIdentity spnEndpointIdentity = new SpnEndpointIdentity(""); 
        var channelFactory = new ChannelFactory<T>(binding);

        return channelFactory;
    }

Опять же, я не могу передать его в конструктор, что мне с ним делать?

Спасибо.


person Plastikfan    schedule 16.12.2009    source источник


Ответы (1)


Вы почти все поняли.

Вам не хватает того, что вы связываете EndpointIdentity с EndpointAddress, а затем предоставляете это CreateChannel ():

SpnEndpointIdentity spnEndpointIdentity = new SpnEndpointIdentity("");
var address = new EndpointAddress(EndpointName, spnEndpointIdentity);
person tomasr    schedule 16.12.2009
comment
Привет, спасибо за ответ. Однако это код, который я пробовал, но вы не можете передать SpnEndpointIdentity конструктору EndpointAddress. - person Plastikfan; 16.12.2009
comment
Убедитесь, что EndpointName - это Uri, а не строка. Он должен работать. - person tomasr; 17.12.2009
comment
Ура, спасибо за это, это наконец-то работает, когда я сначала передаю EndpointName в Uri. Теперь мне просто нужно понять, что на самом деле означает «нулевой» идентификатор SpnEndpoint. - person Plastikfan; 21.12.2009