Ошибка WCF заставляет меня перезапустить и сервер, и клиент - PullRequest
0 голосов
/ 17 января 2012

Я использую WCF для приложения ASP.Net MVC 2. А когда у службы возникает ошибка, мне нужно продолжать перезапускать и сервер, и клиент. Канал неисправен - это ошибка.

Почему это происходит? Почему я получаю эту ошибку и что вы рекомендуете мне избегать привычки перезапуска, из-за того, что это отнимает много времени.

edit1: Я использую блок для размещения службы. Я скоро предоставлю небольшую программу с примером кода, чтобы воспроизвести проблему.

изменить 2: Я использую собственную библиотеку услуг WCF

[ServiceContract]  
public interface IAuctionService  
{  
    [OperationContract]  
    [FaultContract(typeof(DatabaseFault))]  
    void SaveCategory(CategoryDTO category);  

    [OperationContract]  
    [FaultContract(typeof(DatabaseFault))]  
    List<CategoryDTO> ListCategories();  

    [OperationContract]  
    [FaultContract(typeof(DatabaseFault))]  
    CategoryDTO GetCategoryById(long id);  
}

И в клиенте я добавил ссылку на сервис к этому сервису.

Должен ли я обрабатывать все типы исключений и выдавать их, используя ошибки клиенту?

1 Ответ

2 голосов
/ 17 января 2012

Не следует заключать ServiceHost в блок использования!

Подробнее см. Здесь: http://www.danrigsby.com/blog/index.php/2008/02/26/dont-wrap-wcf-service-hosts-or-clients-in-a-using-statement/

ОБНОВЛЕНИЕ

Относительно отправки ошибок вВаши абоненты: Да, вообще говоря, вы должны возвращать исключения в сервисе как ошибки SOAP для вызывающего абонента.Это то, для чего была разработана ошибка SOAP.

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

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

Если у вас возникла ошибка в службе, когда канал для вашего абонента был прерван, вам не нужно явно отправлять ошибки, WCF сделает это за вас.

...