Ошибка WCF не распространяется на клиента должным образом

У нас есть следующие сервисные контракты 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 ответа

Решение

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

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

Мои извинения за то, что я не дал этой последней детали:-)

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

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

Это работает, когда вы вызываете синхронизацию версии метода?

Другие вопросы по тегам