Контракт данных для класса с полями, являющимися пользовательскими классами - PullRequest
0 голосов
/ 04 октября 2010

Я использую сервис WCF для реализации своего веб-сервиса. У меня возникла проблема, когда я пытаюсь вызвать мою функцию, которая принимает URL-адрес в качестве входного параметра и возвращает класс объекта, который я определил.

public class Service: IService<br>
{
    public ClassWS My_Stores(String URL)
    {
        try
        {
            //ClassWS is a class which has other classes like address() defined by me 
            ClassWS My_WS = new ClassWS ();
            return ClsStore.My_Stores(URL);
        }
        catch (Exception ex)
        {}
    }
}

[DataContract]
public class ClassWS 
{
    [DataMember]
    public granularity Granularity;
    [DataMember]
    public address[] Address = new address[5];
    [DataMember]
    public Store[] Stores;
    [DataMember]
    public int Status;

    public ClassWS My_Stores(String URL)
    {
        ClassQuery q = new ClassQuery();
        return (sq.PopulateStores(URL));
    }
}

Я включил каждый класс, определенный мной, в DataContract, как и в предыдущем классе. Я получаю сообщение об ошибке ниже, когда пытаюсь вернуть ClassWS, но не вижу ошибок с возвратом Store [] или Address []

Я получаю ошибку. Ошибка не возвращается в коде сервиса, но возникает при перенастройке значения в прокси.

Базовое соединение было закрыто: Связь была закрыта неожиданно. Трассировка стека сервера:
в System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException (WebException webException, запрос HttpWebRequest, HttpAbortReason abortReason) в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan тайм-аут) в System.ServiceModel.Channels.RequestChannel.Request (Message сообщение, TimeSpan timeout) в System.ServiceModel.Dispatcher.RequestChannelBinder.Request (Message сообщение, TimeSpan timeout) в System.ServiceModel.Channels.ServiceChannel.Call (String действие, логическое одностороннее, Операция ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan тайм-аут) в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, ProxyOperationRuntime операция) в System.ServiceModel.Channels.ServiceChannelProxy.Invoke (Шеззаде сообщение) Исключение переброшено в [0]:
в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (Шеззаде reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32) в IFindStore.My_Stores (String URL) в FindStoreClient.My_Stores (String URL) Внутреннее исключение: основной соединение было закрыто: соединение был закрыт неожиданно. в System.Net.HttpWebRequest.GetResponse () в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan Тайм-аут)

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

Должен ли я записать объект в поток с помощью datacontractserialzer (даже если контракт данных использует datacontractserializer). Должен ли я использовать XmlSerializer?

Заранее спасибо

1 Ответ

2 голосов
/ 04 октября 2010

В общем, если у вас есть DataContract + Datamembers для всех соответствующих классов, которые у вас уже есть, это все, что нужно DataContractSerializer для их сериализации.

следующие

The underlying connection was closed: The connection was closed unexpectedly. 
Server stack trace: at System.ServiceModel.Channels.HttpChannelUtilities.
ProcessGetResponseWebException (WebException .....

- это общее исключение, которое вы обычно увидите, если в вашем сервисе есть необработанное исключение, которое вызывает закрытие удаленного соединения.

Это не обязательно связано с сериализацией ваших классов.

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

...