Закрытие соединение WCF

Я полагаю, что необходимо создать файл, названный __init__.py в каталоге Models так, чтобы Python рассматривал его как модуль.

Тогда можно сделать:

from Models.user import User

можно включать код в __init__.py (например, код инициализации, в котором несколько различных классов нуждаются), или оставьте его незаполненный. Но это должно быть там.

27
задан Harry Johnston 2 May 2014 в 01:47
поделиться

4 ответа

Второй пример с использованием блока "using" неверен. Блок using обеспечивает вызов метода Dispose для прокси-объекта. Метод Dispose, в свою очередь, вызывает метод Close, который (пытается) подключиться к службе, которая генерирует исключение при сбое состояния связи. Так что ваши чувства / догадки абсолютно верны. Было бы хорошо, если бы метод Dispose прокси использовал код из вашего первого примера, но это не так, поэтому не используйте блок using :)

18
ответ дан 28 November 2019 в 04:52
поделиться

У вас есть вся необходимая информация. В результате передовой практикой использования и правильного закрытия / прерывания всех ваших прокси-серверов WCF будет следующий:

YourClientProxy clientProxy = new YourClientProxy();

try
{
   .. use your service
   clientProxy.Close();
}
catch(FaultException)
{
   clientProxy.Abort();
}
catch(CommunicationException)
{
   clientProxy.Abort();
}
catch (TimeoutException)
{ 
   clientProxy.Abort();
}

Перехват FaultException обрабатывает все случаи, когда служба ответили условием ошибки (и, таким образом, ваш канал находится в состоянии сбоя), и CommunicationException будет обрабатывать все другие связанные со связью исключения, которые могут произойти, например, прерывание сетевого подключения и т. д.

Подход с блоком using () победил. t работают, поскольку, если исключение происходит в конце блока, когда метод Dispose () вызывает метод Close () на прокси-сервере клиента, у вас нет возможности поймать и обработать это.

34
ответ дан 28 November 2019 в 04:52
поделиться

В книге Juval Lowy's Excellent Programming WCF он рекомендует:

try 
{
    ClientProxy clientProxy = new ClientProxy();
    clientProxy.SomeMethod();
    clientProxy.Close();
}
catch
{
    proxy.Abort();
}
4
ответ дан 28 November 2019 в 04:52
поделиться

Используйте пример 1

Вот хорошая статья о том, почему вам не следует использовать using:

http://msdn.microsoft.com/en-us/library/aa355056. aspx

2
ответ дан 28 November 2019 в 04:52
поделиться
Другие вопросы по тегам:

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