【发布时间】:2011-05-02 09:57:15
【问题描述】:
所以, 我有这样的事情: 有一个 ASP.NET 应用程序 (1) 引用了 WCF 服务 (2),它引用了 .NET 应用程序 (3)。 (1) 创建查询将其提供给 (2),(2) 从 (3) 获取一些信息,对其进行处理并将其返回给 (1)。
这就是问题所在 - 请求的 DataContract 类(由 (2) 和 (1) 使用)其中有一个 DateTime 对象。当在 (1) 中分配此 DateTime 时,一切正常。但是,当使用此请求对象调用 ServiceContract 的方法时,(2) 将此对象视为 null(DateTime 是否可以为 null)或 1/1/0001。字符串和整数工作得很好。没有抛出异常。
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
//..
}
【问题讨论】:
-
这不是不可能,我会发布数据合同(重要部分)和服务。
标签: .net asp.net wcf datetime serialization