2010-08-25 3 views
0

У меня есть wcf-клиент.wcf подключение передовая практика

Каков наилучший способ обработки соединений?

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

void doSomething(){ 
    MyService service = new MyService(); 
    //try 
    service.doThis(10); 
    ... 
    service.doThat(20); 
    service.Close() 
    // catch 
} 

Или я должен держать открытую ссылку и прервать его и переинициализировать, если происходит ошибка соединения:

class Myclass{ 
    MyService service = new MyService(); 
    ... 
    void myFunction(){ 
    try{ 
     service.doThis(10); 
    }catch(...){ 
     service.abort(); 
     service = new Myservice(); 
     // do something here, but what it a smart thing to to? 
    } 
    } 
} 

С уважением

ответ

1

Первый подход является общим. Второй подход совершенно неверен. Самый важный намек на ваш вопрос: если вы закрываете/прерываете прокси-сервер, вы не можете использовать его снова. Он открывается только один раз.

Если вы используете первый подход, вы каждый раз создаете новый прокси, и вы «открываете» новое соединение. Открытые здесь могут иметь разное значение для разных привязок и ситуаций. После совершения звонка вы изящно закрываете прокси. Это также сообщит серверу о закрытии соединения.

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

Если вы хотите повторно использовать прокси-сервер, вы должны оставить его открытым. Чем вам придется обрабатывать некоторые другие сложности с тайм-аутами на сервере (receiveTimeout - по умолчанию соединение закрывается после 10 минут бездействия) и необработанных исключений. Если у вас есть соединение или служба на основе сеанса, каждое необработанное исключение приведет к сбою канала связи, и вы сможете только вызывать Abort на канале.

+0

Если первый подход является обычным явлением, каждый раз, когда накладные расходы открывают новое соединение, или накладные расходы незначительны? – darpet

+0

Это зависит от типа приложения, которое вы создаете, и от частоты вызовов. –

+0

Один вызов за 5-6 секунд, 200 клиентов в паралелите – darpet

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