WCF ловит исключение "Сервер не дал значимого ответа .." - PullRequest
4 голосов
/ 26 апреля 2011

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

"Сервер не предоставил значимого ответа; это может быть вызвано несоответствием контракта, преждевременным завершением сеанса или внутренней ошибкой сервера."

Также обратите внимание, что я попытался выполнить настройку в WCF «Сервер не предоставил значимого ответа» но все еще не работал.

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

Любая помощь приветствуется.

Ответы [ 5 ]

3 голосов
/ 11 июня 2012

Если кто-то еще сталкивается с тем же исключением, с тем же поведением отладки до конца на сервере, но получая исключение при возврате клиенту, другой возможной причиной является неинициализированное перечисление в контракте на возврат данных, где enum имеет явные значения, но не имеет явного нулевого значения.

[ServiceContract]
public interfact IMyService
{
    [OperationContract]
    MyResult DoSomething();
}

[DataContract]
public class MyResult
{
    [DataMember]
    public OperationStatus Status {get; set;}

    [DataMember]
    public string ErrorText {get; set;}
}

[DataContract]
public enum Operation Status
{
    [EnumMember]
    Success = 1,
    [EnumMember]
    Failure = 2
}

public class MyService : IMyService
{
    public MyResult DoSomething()
    {
        var result = new MyResult();

        // ... do work, but don't set any properties on result ...

        return result;

    }
}

Причиной ошибки в этом сценарии является то, что result.Status по умолчанию равен нулю, но контракт данных не предоставляет никаких средств для его сериализации, поскольку он не является одним из явно определенных значений перечисления.

Решение (при условии, что вам действительно нужно это перечисление с явными целочисленными значениями) состоит в том, чтобы либо установить значение перечисления в возвращаемом объекте, либо предоставить значение по умолчанию (ноль).

[DataContract]
public enum Operation Status
{
    [EnumMember]
    Unknown = 0,
    [EnumMember]
    Success = 1,
    [EnumMember]
    Failure = 2
}

- Bill

3 голосов
/ 29 апреля 2011

Я выяснил причину этого, что прокси был сгенерирован неверно для типа enum, он был сгенерирован как строка, поэтому он не прошел и выдал мне исключение

2 голосов
/ 21 ноября 2012

если ваш веб-сервис возвращает DataTable, он должен иметь TableName;посмотрите на https://stackoverflow.com/a/5894732/775811

0 голосов
/ 04 июля 2018

Это случилось со мной в новой системе (Windows 10) после попытки вызова службы Windows Workflow. Другие вызовы службы WCF работали, но попытка вызвать действие рабочего процесса (служба xamlx WF4) получила эту ошибку.

Попытка найти файл service.xamlx привела к появлению пустого экрана. В конечном итоге это привело меня к другому ответу (конкретному ответу IIS8), который заключается в добавлении функции активации HTTP в службах IIS:

WCF на IIS8; * Отображение обработчика .svc не работает

0 голосов
/ 10 февраля 2016

Причиной этой ошибки для меня было отсутствие FaultContractAttribute (typeof (FaultModel)) в интерфейсе функции сервера (тот, который помечен атрибутом OperationContract).

Когда FaultException () было выдано на стороне сервера, которую выдавала клиентская сторона - CommunicationException : «Сервер не предоставил значимого ответа, это может быть вызвано из-за несоответствия контракта, преждевременного завершения сеанса или внутренней ошибки сервера. ".

Надежда поможет кому-то.

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