Ошибка WCF не распространяется на клиента должным образом - PullRequest
0 голосов
/ 09 апреля 2010

У нас есть следующие сервисные контракты WCF:

[ServiceContract(Namespace = "http://example.com", Name = "Service1")]
public interface IService1
{      
  [OperationContract]
  [FaultContract(typeof(Fault1))]
  ValidateUserResult ValidateUser(
                       string username, 
                       string password);
}

[ServiceContract(Namespace = "http://example.com", Name = "Service1")]
public interface IService1Async
{      
    [OperationContract(AsyncPattern = true)]
    [FaultContract(typeof(Fault1))]
    IAsyncResult BeginValidateUser(
                       string username, 
                       string password, 
                       AsyncCallback callback, 
                       object userState);

    ValidateUserResult EndValidateUser(IAsyncResult asyncResult);
}

[DataContract(Namespace = "http://example.com")]
public class Fault1
{
}

Мы вызываем асинхронную версию ValidateUser на стороне клиента и выкидываем FaultException<Fault1> на сервер, но все, что получает клиент, это база FaultException.

В чем может быть причина того, что указанная в договоре неисправность не получена?

Ответы [ 2 ]

1 голос
/ 09 апреля 2010

Теперь мы нашли, почему. Мы генерируем ошибку из Сервисного Поведения, используя метод ProvideFault. Там мы используем код, подобный примеру в IErrorHandler.ProvideFault в MSDN

Единственное отличие заключалось в том, что мы не выполняли правильное действие при перегрузке Message.CreateMessage. Мы скопировали именно то, что генерируется в случае, если мы вручную сбросили ошибку и вуаля.

Мои оправдания за то, что не указали эту последнюю деталь: -)

0 голосов
/ 09 апреля 2010

Можете ли вы показать нам операторы catch для вашего звонка? Контракт и все выглядит хорошо для меня ...

В каком порядке вы проверяете неисправности ?? Вам нужно будет проверить FaultException<Fault1> перед проверкой FaultException или CommunicationException - есть ли шанс, что вы каким-то образом перепутаете этот ордер?

Работает ли это, когда вы вызываете синхронизированную версию метода?

...