Итак, у меня есть что-то вроде этого: есть приложение 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
//..
}