【问题标题】:ASP.NET to WCF serialization issue(?)ASP.NET 到 WCF 序列化问题(?)
【发布时间】: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


【解决方案1】:

如果有人感兴趣,那是我的错 =[ 我定义了 Web Reference 而不是 Service Reference =[ 所以...是的...谜团解决了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多