2012-06-05 4 views
2

У меня есть небольшой основной рабочий пример использования WCF, чтобы заставить два приложения разговаривать друг с другом. Мое клиентское приложение, которое слушает сервер, имеет XML в файле app.config, который настраивает мои настройки. Одна настройка, жестко закодированная во время компиляции, - это параметры sendTimeout, которые были захоронены в соответствии с установкой basicHttpBinding. Например:Как изменить basicHttpBinding sendTimeout во время выполнения?

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IScriptRunHost" closeTimeout="00:05:00" 
        openTimeout="00:05:00" receiveTimeout="00:05:00" sendTimeout="00:00:15" 

Я хотел бы иметь возможность установить свойство sendTimeout во время выполнения (используя C#). Однако, будучи настолько новым для WCF, я не знаю, с чего начать?

+0

Просто ознакомьтесь с приведенным выше фрагментом кода, значение было установлено на 15 секунд. Это было только для моих целей тестирования. –

ответ

6

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

ServiceClient _client = new ServiceClient(new BasicHttpBinding { SendTimeout = new TimeSpan(2, 0, 0) },new EndpointAddress("http://localhost:8089/MyService.svc")); 

или:

BasicHttpBinding myBinding = new BasicHttpBinding(); 
       myBinding.OpenTimeout = new TimeSpan(2, 0, 0); 
       myBinding.CloseTimeout = new TimeSpan(2, 0, 0); 
       myBinding.SendTimeout = new TimeSpan(2, 0, 0); 

ServiceClient _client = new ServiceClient(); 
       _client.Endpoint.Binding = myBinding; 

Но, как вы, вероятно, может сделать вывод, взглянув на код, если вы хотите изменить свои значения тайм-аута, конечную точку обслуживания или практически любую конфигурацию привязки во время выполнения, вам придется снести предыдущий клиентский прокси и избавиться от него и использовать новый то, что вы создали, очевидно, это имеет некоторый нежелательный эффект, так как ваши клиенты мгновенно будут отключены от вашего ser вице, так что имейте это в виду. Вы также можете определить 2 или 3 (или сколько хотите) связывание конфигураций в вашем файле конфигурации и создать новый клиент и настроить его на использование этой привязки, что почти идентично выполнению кода. Даже в этом случае вам придется создать новый клиентский прокси, чтобы иметь возможность использовать другую конфигурацию привязки.

+1

Большое вам спасибо. Я попробую и дам вам знать, как это работает! –

+2

Как скопировать настройки из моего старого экземпляра «BasicHttpBinding»? Так что мне не нужно заменять большую часть моего app.config кодом? –

+0

Больше вопросов, чем это решает. Что мне делать со старым клиентом службы? –

Смежные вопросы