Что не так с передачей сложного типа в результате в WCF? - PullRequest
0 голосов
/ 30 января 2012

У меня есть следующие методы WCF:

[OperationContract]
array<Object^>^ GetResult(UInt64 taskId);

[OperationContract]
array<UrlInfo^>^ GetResultAsUriInfo(UInt64 taskId);

, когда я возвращаю массив строк через GetResult, он работает нормально.Также, когда я возвращаю массив UrlInfo через GetResultAsUriInfo, он работает без проблем.Однако, когда я пытаюсь вернуть appay UrlInfo через GetResult, я получаю следующее исключение на стороне клиента:

 The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be  
 used for communication because it is in the Faulted state.

внутреннее исключение равно нулю.

Вот определение для UrlInfo:

[Serializable]
[DataContract]
public class UrlInfo
{
    Uri uri;

    [DataMember]
    public Uri Uri
    {
        get { return uri; }
        set { uri = value; }
    }
    string title;

    [DataMember]
    public string Title
    {
        get { return title; }
        set { title = value; }
    }

    string description;
    [DataMember]
    public string Description
    {
        get { return description; }
        set { description = value; }
    }

    List<string> tags = new List<string>();
    [DataMember]
    public List<string> Tags
    {
        get { return tags; }
        set { tags = value; }
    }

    Dictionary<string, string> allMetadata = new Dictionary<string, string>();
    [DataMember]
    public Dictionary<string, string> AllMetadata
    {
        get { return allMetadata; }
        set { allMetadata = value; }
    }


    string[] categoryPreferences = new string[0];

    [DataMember]
    public string[] CategoryPreferences
    {
        get { return categoryPreferences; }
        set { categoryPreferences = value; }
    }

Почему я не могу вернуть массив UrlInfo как массив объектов?

1 Ответ

2 голосов
/ 30 января 2012

wcf может просто передавать типы знаний, а не универсальные типы, но я не знаком с синтаксисом c ++.

но вы можете написать свой собственный сериализатор для ваших типов, если вам нужно.

РЕДАКТИРОВАТЬ: я действительно должен прочитать вопрос более внимательно. проблема в типе вашего объекта в

 array<Object^>^ GetResult(UInt64 taskId);

тип объекта не может быть сериализован в WCF. Вы должны использовать тип, который вы ожидаете там.

...