Ошибка 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
- есть ли шанс, что этот приказ каким-то образом перепутается?
Это работает, когда вы вызываете синхронизацию версии метода?