Проблема сериализации ASP.NET в WCF (?) - PullRequest
1 голос
/ 29 октября 2010

Итак, у меня есть что-то вроде этого: есть приложение ASP.NET (1) , которое ссылается на WCF-сервис (2) , которое ссылается на .NET-приложение (3) .(1) создает запрос, передает его (2), (2) получает некоторую информацию из (3), обрабатывает ее и возвращает обратно в (1).

И вот в чем проблема - есть класс DataContract длязапрос (который используется обоими (2) и (1)), который содержит объект DateTime.Когда этот DateTime назначен в (1), все в порядке.Но когда метод ServiceContract вызывается с этим объектом запроса, (2) видит этот объект как нулевой (если DateTime был обнуляемым) или 1/1/0001.String и Ints работают просто отлично.Не выдается никаких исключений.

CultureInfos различаются по (1) и (2), и оно должно оставаться таким.Использование DateTime.SpecifyKind () не помогает.

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

Это проблема сериализации?Если да, то как это решить?

Я новичок в этом, так что ... пожалуйста, будьте нежны; [Спасибо

ОБНОВЛЕНИЕ

Сервисная конфигурация:

<service behaviorConfiguration="eServiceX.eServiceXInterfaceBehavior" name="eServiceX.ServiceXInterface">
          <endpoint address="" binding="basicHttpBinding" contract="eServiceXCommon.IeXService"></endpoint>
          <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
          <host>
            <baseAddresses>
              <add baseAddress="http://localhost:8732/eServiceX"/>
            </baseAddresses>
          </host>
</service>
..
<behavior name="eService.eServiceXInterfaceBehavior">
       <serviceMetadata httpGetEnabled="true" />   
       <serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>

Данные контракта:

[DataContract]
public class GetXRequest : Request
{
        private string _name;
        private DateTime _date;
        [DataMember]
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        [DataMember]
        public DateTime DateTime
        {
            get { return this._date; }
            set { this._date = value; }
        }
}

... и проблемные части:

// ASP.NET app side:
X = new eService.ServiceXInterface();
eService.GetXRequest rq = new eService.GetXRequest();
rq.Name = "Blar";
rq.Date = SomeDay;
eService.GetXResponce Getter = X.GetX(rq); //here rq.Name is "Blar"; rq.Date is SomeDay

//..
// WCF service side:

[ServiceContract(Name = "IeXService")]
public interface IeXService
{
    [OperationContract]
    GetXResponce GetX(GetXRequest request);
}

public GetXHResponce GetX(GetXRequest request)
{
     doSMTH(request.Name, request.Date); //here request.Name is "Blar", but Date's value is 1/1/0001
     //..
}

1 Ответ

2 голосов
/ 10 ноября 2010

Если кому-то интересно, это было мое плохо = [ Я определил Web Reference вместо Service Reference = [ так что ... да ... тайна разгадана

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