WCF - обнаружение ошибок на сервере и возврат пользовательских типов вместо - PullRequest
1 голос
/ 25 октября 2010

Мы пытаемся найти способ изменить поведение службы WCF, чтобы перехватывать все исключения, и вместо того, чтобы возвращать ошибки клиенту, он заполняет пользовательский объект возврата данными об исключениях и возвращает их. Пока что нам не очень повезло. Я нашел этот пример: Перехват пользовательских ошибок

Однако он не возвращает пользовательские типы, как нам бы этого хотелось. Какие еще есть варианты?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 25 октября 2010

Если вы хотите иметь интероперабельную и «нестандартную» услугу, вы должны всегда возвращать FaultException<T> ошибки SOAP от вашего сервиса к клиенту.

Так как этот тип принимает общий <T>, вы можете поместить в него что угодно, чтобы сообщить о своих ошибках. Этот тип должен быть украшен [DataContract], а его члены должны быть возвращены с атрибутами [DataMember].

[DataContract]
public class MyErrorInfo
{
    [DataMember]
    public int ErrorCode { get; set; }

    [DataMember]
    public string ErrorMessage { get; set; }
}

Когда вы перехватываете эти исключения на стороне службы и возвращаете FaultException<MyErrorInfo> (или что бы то ни было, вы в конечном итоге вызываете свой класс ошибок), вам также нужно украсить свои операции с помощью

[FaultContract(typeof(MyErrorInfo))]
[OperationContract]
public SomeType SomeMethodCall(SomeType parameter);

чтобы ваши клиенты могли поймать FaultException<MyErrorInfo> и обработать его.

0 голосов
/ 25 октября 2010

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

Я не думал об использовании FaultException, но я проверю, как мы можем это сделать.Это была служба WCF (.NET 3.5), работающая в SharePoint 2007 и используемая Silverlight 4.

0 голосов
/ 25 октября 2010

Я ссылался на эту статью в другом ответе, но она также может вам помочь. Обработка исключений WCF

статья Упрощение WCF: использование исключений в качестве ошибок

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