WCF: не может обработать FaultException <T>на клиенте - PullRequest
0 голосов
/ 24 ноября 2011

Я хотел бы выдать пользовательское исключение с сервера WCF, но оно не работает для моих клиентов. Что я делаю:

Мое пользовательское исключение:

[DataContract]    
public class MyCustomException
{
  [DataMember]
  public string MyField { get; set; }
}

Мой сервисный контракт WCF

[ServiceContract]    
public interface IMyService
{
       [OperationContract]
       [FaultContract(typeof(MyCustomException))]
       bool Foo();
}

Мой глобальный обработчик исключений для службы WCF (этот код срабатывает при вызове Foo):

public void ProvideFault(Exception error, System.ServiceModel.Channels.MessageVersion version, ref System.ServiceModel.Channels.Message fault)
{
  var ex = new MyCustomException { MyField = "..." };
  var fe = new FaultException<MyCustomException>(
                    ex,
                    new FaultReason("reason"),
                    FaultCode.CreateSenderFaultCode(new FaultCode("some-string")));

  var flt = fe.CreateMessageFault();
  fault = Message.CreateMessage(
    version,
    flt,
    string.Empty
  );        
}

Тогда ... мой клиент:

try
{
   Create channel factory and call Foo
}
catch(FaultException<MyCustomException> ex)
{
  // OOOPS! It doesn't work!!! 
}
catch(FaultException ex)
{
  // This block catches exception 
}

Что здесь может быть не так? Заранее спасибо!

1 Ответ

2 голосов
/ 24 ноября 2011

Я нашел проблему в ProvideFault методе:

fault = Message.CreateMessage(
    version,
    flt,
    string.Empty
  ); 

следует заменить на

fault = Message.CreateMessage(
    version,
    flt,
    fe.Action
  ); 

Теперь все идет хорошо!

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