Wcf и ExceptionDetail Issue - PullRequest
       17

Wcf и ExceptionDetail Issue

2 голосов
/ 01 марта 2011

Я создал свой собственный класс следующим образом:

[DataContract]
public class MyOperationFault : ExceptionDetail
{


    /// <summary>
    /// Contructor
    /// </summary>
    /// <param name="ex"></param>
    public MyOperationFault(Exception ex) : base(ex)
    {
    }
}

тогда мой интерфейс службы wcf выглядит так:

   [OpearationContract()]
   [FaultContract(typeof(MyOperationFault))]
   void DoWork();

Теперь все работает как положено в среде разработчика - когда я поднимаю FaultException:

   throw new FaultException<MyOperationFault>(new MyOperationFault(new Exception("Failed")));

Это будет поймано на стороне клиента без проблем.

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

Не удалось добавить сервис. Метаданные службы могут быть недоступны. Убедитесь, что ваш сервис работает и предоставляет метаданные. Ошибка: невозможно получить метаданные из http://localhost:33620/MyService.svc Если это Windows (R) Услуга Communication Foundation, к которой у вас есть доступ, пожалуйста убедитесь, что вы включили публикацию метаданных в указанном адрес. Для получения справки о включении публикации метаданных, пожалуйста, обратитесь к Документация MSDN на http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Обмен URI ошибки: http://localhost:33620/MyService.svc метаданные содержит ссылку, которая не может быть решена: 'http://localhost:33620/MyService.svc'. Не удалось подключиться к http://localhost:33620/MyService.svc. Код ошибки TCP 10061: Нет соединение может быть установлено, потому что целевой компьютер активно отказался это 127.0.0.1:33620. Невозможно подключиться к удаленному серверу Нет соединение может быть установлено, потому что целевой компьютер активно отказался это 127.0.0.1:33620

Как только я закомментирую [FaultContract(typeof(MyOperationFault))] из методов сервиса - wcftestclient начинает работать без сбоев. Как с этим справиться?

1 Ответ

0 голосов
/ 31 августа 2017

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

Возможно, TestClient завершился ошибкой, поскольку в MyOperationFault отсутствовал конструктор без параметров.

Решением, которое я придумал, было добавление частного конструктора без параметров, как в

[DataContract]
public class MyOperationFault : ExceptionDetail
{
    /// i dont know why but this fixed the issue
    private MyOperationFault()
    {
    }

    /// <summary>
    /// Contructor
    /// </summary>
    /// <param name="ex"></param>
    public MyOperationFault(Exception ex) : base(ex)
    {
    }
}
...