Лучшая практика обработки соединений wcf - PullRequest
0 голосов
/ 25 августа 2010

У меня есть клиент 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 Ответ

1 голос
/ 25 августа 2010

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

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

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

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

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