Почему мой ChannelFactory не видит мою конфигурацию конечной точки?

48
задан joshperry 6 April 2011 в 16:32
поделиться

5 ответов

Используйте «*», чтобы использовать первую подходящую конечную точку.

public AdminClient()
{
    ChannelFactory<IProductAdmin> factory  
         = new ChannelFactory<IProductAdmin>("*");

    productAdminChannel = factory.CreateChannel();
}

Пример MSDN

62
ответ дан 26 November 2019 в 18:57
поделиться

Необходимо определить имя конечной точки, потому что у Вас может быть много конечных точек для того же типа контракта. (Например, сервис, развертываемый на одном tcp и одном http ws конечная точка). Microsoft, возможно, конечно, создала что-то в WCF, чтобы проверить, существует ли только один клиент, определенный для интерфейса контракта, но это не было бы очень последовательно. (что это работало бы, если существует только одна конечная точка, определенная для контракта). Когда Вы добавили бы другую конечную точку для того же контракта позже, код повредится в этом случае.

3
ответ дан Raymond Roestenburg 26 November 2019 в 18:57
поделиться

Можно уйти, не определяя имя конечной точки на сервисной стороне. Для стороны клиента необходимо определить имя, потому что можно соединяться с многочисленными услугами, которые имеют тот же контракт. Как был бы WCF знать тогда, какой Вы хотите?

2
ответ дан Krzysztof Kozmic 26 November 2019 в 18:57
поделиться

Это прослушивало меня в течение нескольких дней, таким образом, я прошел примеры, показанные в статье, Вы связались выше. Все работает правильно за исключением второго клиентского примера прокси, с которым у Вас есть проблема. Как Вы отметили, и другие отвечающие стороны, создающие прокси таким образом, требует имени конечной точки, связывая его с клиентом (который является, где конечная точка определяется). Я все еще не уверен, почему это ведет себя способ, которым это делает, но я не нашел способа использовать тот пример, явно не связывая прокси с конечной точкой.

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

 using System;
   using System.ServiceModel;

   namespace CoDeMagazine.ServiceArticle
   {
       public class ProductClient 
          : ClientBase<IProductBrowser>, 
            IProductBrowser
       {

           #region IProductBrowser Members

           public ProductData GetProduct(
              Guid productID)
           {
               return Channel.GetProduct(productID);
           }

           public ProductData[] GetAllProducts()
           {
               return Channel.GetAllProducts();
           }

           public ProductData[] FindProducts(
              string productNameWildcard)
           {
               return Channel.FindProducts(
                  productNameWildcard);
           }

           #endregion
       }

   }

, Который, кажется, работает просто великолепно. Так, возможно, вторым примером прокси является просто плохой способ сделать вещи, или возможно мы пропускаем что-то очевидное...

2
ответ дан Tad Donaghe 26 November 2019 в 18:57
поделиться

Если вы не хотите указывать явное имя конечной точки, вы можете написать:

    public AdminClient()
    {
        ChannelFactory<IProductAdmin> factory =  
           new ChannelFactory<IProductAdmin>(string.Empty);
        productAdminChannel = factory.CreateChannel();
    }

Необязательный конструктор без параметров не работает.

1
ответ дан 26 November 2019 в 18:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: