У ChannelFactory нет адреса на конечной точке, почему? - PullRequest
3 голосов
/ 18 ноября 2008

Когда я создаю новый экземпляр ChannelFactory:

var factory = new ChannelFactory<IMyService>();

и что я создаю новый канал, у меня есть исключение, говорящее, что адрес конечной точки является нулевым.

Моя конфигурация в моем файле web.config такая же, как упоминалось, и все как положено (особенно адрес конечной точки).

Если я создаю новую MyServiceClientBase, она загружает всю конфигурацию из моей фабрики каналов:

var factoryWithClientBase = new MyServiceClientBase().ChannelFactory;
Console.WriteLine(factoryWithClientBase.Endpoint.Address); //output the configuration inside the web.config


var factoryWithChannelFactory = new ChannelFactory<IMyService>();
Console.WriteLine(factoryWithChannelFactory.Endpoint.Address); //output nothing (null)

Почему?

Ответы [ 3 ]

9 голосов
/ 18 ноября 2008

Будет ли это работать, если вы предоставите конечной точке такое имя в Web.Config:

<endpoint address="http://localhost:2000/MyService/" binding="wsHttpBinding"
    behaviorConfiguration="wsHttpBehaviour" contract="IService"
    name="MyWsHttpEndpoint" />

И создайте канал, используя ChannelFactory следующим образом:

var factory = new ChannelFactory<IMyService>("MyWsHttpEndpoint");
5 голосов
/ 12 декабря 2008

Я наконец нашел ответ. ChannelFactory не читает информацию из вашего Web.Config / app.config. ClientBase (который затем работает с ChannelFactory) делает.

Все это стоило мне нескольких часов работы, но я наконец нашел вескую причину.

:)

3 голосов
/ 21 марта 2010

ChannelFactory, созданный новым оператором, читает из web.config. AnAngel ответ выше верен. Вам просто нужно убедиться, что вы предоставили конечной точке имя. И убедитесь, что контракт конечной точки установлен правильно (очень важно)

До этого у меня был опыт, когда мой web.config был сгенерирован VS, и контракт конечной точки установлен на контракт в ServiceReference (в результате добавления Service Reference), который мне не нужен. Хотя оно имеет имя, аналогичное моему первоначальному контракту (но находится в разных пространствах имен)

<endpoint address="http://localhost:2000/MyService/" binding="wsHttpBinding"
behaviorConfiguration="wsHttpBehaviour" contract="TheCorrectNamespace.IService"
name="MyWsHttpEndpoint" />

Аскер не опубликовал свой web.config, поэтому я предполагаю, что вы, скорее всего, допустили ошибку, которую я сделал (указав неверный контракт для конечных точек)

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