Я полагаю, что необходимо создать файл, названный __init__.py
в каталоге Models так, чтобы Python рассматривал его как модуль.
Тогда можно сделать:
from Models.user import User
можно включать код в __init__.py
(например, код инициализации, в котором несколько различных классов нуждаются), или оставьте его незаполненный. Но это должно быть там.
Второй пример с использованием блока "using" неверен. Блок using обеспечивает вызов метода Dispose для прокси-объекта. Метод Dispose, в свою очередь, вызывает метод Close, который (пытается) подключиться к службе, которая генерирует исключение при сбое состояния связи. Так что ваши чувства / догадки абсолютно верны. Было бы хорошо, если бы метод Dispose прокси использовал код из вашего первого примера, но это не так, поэтому не используйте блок using :)
У вас есть вся необходимая информация. В результате передовой практикой использования и правильного закрытия / прерывания всех ваших прокси-серверов 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 () на прокси-сервере клиента, у вас нет возможности поймать и обработать это.
В книге Juval Lowy's Excellent Programming WCF он рекомендует:
try
{
ClientProxy clientProxy = new ClientProxy();
clientProxy.SomeMethod();
clientProxy.Close();
}
catch
{
proxy.Abort();
}
Используйте пример 1
Вот хорошая статья о том, почему вам не следует использовать using: