所以, 我有这样的事情(?): 有一个ASP.NET应用程序(1)引用WCF服务(2)引用.NET应用程序(3)。 (1)创建查询给它(2),(2)从(3)获取一些信息,处理它并将其返回给(1)。ASP.NET到WCF序列化问题
这里是问题 - 有DataContract类请求(由(2)和(1)使用),它有一个DateTime对象。当(1)中分配了这个DateTime时,一切正常。但是,当使用此请求对象调用ServiceContract的方法时,(2)将此对象视为空(即DateTime为空)或1/1/0001。字符串和Ints工作得很好。没有例外被抛出。
CultureInfos与(1)和(2)不同,它必须保持这种状态。使用DateTime.SpecifyKind()没有帮助。
我不想欺骗和发送DateTime作为字符串,BC它只是愚蠢的。
是序列化问题吗?如果是这样,该如何解决?
我很新的这一点,所以......请,要温柔; 感谢
UPDATE
服务配置:
<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; }
}
}
...和问题p艺术:
// 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
//..
}
这不是不可能的,我会发布数据合同(重要部分)和服务。 – steinar 2010-10-29 13:07:03
查看更新,谢谢.. – exp 2010-10-29 13:35:13