WCF возвращает пользовательские типы - PullRequest
3 голосов
/ 13 июня 2010

Я новичок в WCF, пытаюсь выполнить относительно простую задачу. Я пытаюсь вернуть список объектов, прочитанных из базы данных, но не могу преодолеть некоторые действительно раздражающие исключения Вопрос очень простой? Что не так с картинкой?

[ServiceContract]
public interface IDBService
{        
    [OperationContract]
    string Ping(string name);

    [OperationContract]
    InitBDResult InitBD();
}

public InitBDResult InitBD()
        {
            _dc = new CentralDC();
            InitBDResult result = new InitBDResult();
            result.ord = _dc.Orders.First();
            return result;
        }


[DataContract]
    public class InitBDResult
    {
        //[DataMember]
        //public List<Order> Orders { get; set; }

        [DataMember]
        public Order ord { get; set; }
    }

Ответы [ 2 ]

3 голосов
/ 13 июня 2010

На основании того, что вы разместили:

public InitBDResult InitBD()
{
    _dc = new CentralDC();
    InitBDResult result = new InitBDResult();
    result.ord = _dc.Orders.First();
    return result;
}

Этот метод содержится в классе, который реализует интерфейс IDBService ?? Это не совсем понятно из твоего поста ....

[DataContract]
public class InitBDResult
{
        //[DataMember]
        //public List<Order> Orders { get; set; }

        [DataMember]
        public Order ord { get; set; }
}

Является ли класс Order также отмеченным [DataContract] и любые свойства, которые должны быть сериализованы с атрибутами [DataMember] ??

По умолчанию WCF использует сериализатор контракта данных и требует, чтобы возвращаемые классы (все они) были помечены [DataContract], а внутри этих классов все свойства и поля, которые должны быть возвращены в сериализованном ответе. иметь атрибут [DataMember].

Атрибут [Serializable] ничего не делает для сериализации WCF по умолчанию. Читайте о сериализации WCF в журнале MSDN - настоятельно рекомендуется!

Для разработки часто полезно включить сведения об исключениях из ваших служб WCF, чтобы вы получили больше информации о том, что пошло не так. Для этого вам нужно иметь служебное поведение в вашей конфигурации:

 <behaviors>
    <serviceBehaviors>
      <behavior name="debugging">
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>

и затем примените это поведение к вашей службе в вашей конфигурации:

<service name="...." behaviorConfiguration="debugging">

Тогда вы получите информацию о деталях ваших исключений, а не просто общее исключение «что-то пошло не так».

0 голосов
/ 13 июня 2010

Для таких проблем WCF полезно использовать средство регистрации трассировки служб.Вы должны включить его в своем конфиге.Затем выполните действие, которое не удалось, и посмотрите журнал.Скорее всего, он даст вам подробные сообщения об исключении о проблеме.

Дополнительная информация о MSDN:

http://msdn.microsoft.com/en-us/library/ms732023.aspx

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