Создайте клиент службы WCF с указанным адресом без указания имени конфигурации

Есть ли способ создать экземпляр клиента службы WCF в С# с указанным адресом конечной точки без указания имени конфигурации?

По умолчанию клиенты имеют следующие конструкторы:

    public ServiceClient() 
    public ServiceClient(string endpointConfigurationName)
    public ServiceClient(string endpointConfigurationName, string remoteAddress)

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

Ответ 1

Я предпочитаю не использовать конфигурацию конечной точки в файле .config. Обычно я делаю что-то вроде этого:

        BasicHttpBinding basicbinding = new BasicHttpBinding();
        basicbinding.SendTimeout = TIMEOUT;
        basicbinding.OpenTimeout = TIMEOUT;
        ServiceClient client = new ServiceClient(basicbinding, new EndpointAddress(new Uri("http://xxxxx")));

Ответ 2

Созданный клиент должен также иметь конструктор, который выглядит так:

public ServiceClient(
    System.ServiceModel.Channels.Binding binding,
    System.ServiceModel.EndpointAddress remoteAddress)
        : base(binding, remoteAddress) {
    }

Вы можете назвать это без конфигурации конечной точки.

Ответ 3

Если вы действительно хотите просто позвонить в службу, не зная, что нужно знать о службах WCF и обработке конфигурации, на С# вы можете просто сделать...

        String url = "http:\\somehost:someport\\pathToSomeService";

        EndpointAddress address = new EndpointAddress(url);
        Binding binding = new BasicHttpBinding();

        YourClient client = new YourClient(binding, address);

        // Call your client methods
        client.SomeMethod(parm1, parm2);

Вышеприведенное предполагает, что вы создали ссылку на службу и не требуете, чтобы информация о конфигурации существовала где угодно, а не в сгенерированной службе, а не в DLL, а не в исполняемом файле. Нет конфигурации. Никто.

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

Ответ 4

Ну, вы можете использовать конструктор по умолчанию, но тогда вам придется вручную запрограммировать все параметры конфигурации. Указав имя конфигурации, клиент службы автоматически загрузит конфигурацию из файла .config, все, что вам нужно знать, это какая конфигурация используется (у вас может быть несколько, например, один для HTTP, а другой для Net.Tcp). RemoteAddress, конечно же, просто сообщает WCF, где нужно установить соединение.

Если у вас возникли проблемы с настройкой самих параметров клиента, убедитесь, что вы используете инструмент настройки службы WCF. Он работает как для конфигурации службы, так и для конфигурации клиента.