【问题标题】:Object properties set to null when send objects to wcf service from windows mobile 6 application将对象从 windows mobile 6 应用程序发送到 wcf 服务时,对象属性设置为 null
【发布时间】:2013-11-28 19:52:47
【问题描述】:

我创建了一个 WCF 服务并将其托管在 IIS 上,我成功地从一个 windows Mobile 6.0 应用程序调用了该服务,并且可以轻松地从该服务中检索数据。

问题是当我尝试向服务发布数据时,我发现发送给服务的类对象的属性都是null

另一个问题,当我创建服务代理时,我发现所有通用参数(例如List<Customer>)都转换为数组(例如Customer[])。

这是我在服务中的代码示例:

[ServiceContract]
public interface ITest
{
   [OperationContract]
   long AddBoxTransaction(BOXTRANSACTION boxTransaction);
}

这是客户端的代码示例:

BOXTRANSACTION boxTransaction = new BOXTRANSACTION();
{
    boxTransaction.BOXID = long.Parse(dr["BoxId"].ToString());
    boxTransaction.TRANSACTIONDATE = DateTime.Parse(dr["TransactionDate"].ToString());
    boxTransaction.STATUSID = long.Parse(dr["StatusId"].ToString());

    if(!(dr["CollectorUserId"] is System.DBNull)) 
       boxTransaction.COLLECTORUSERID = int.Parse(dr["CollectorUserId"].ToString());

    boxTransaction.CURRENTLOCATIONID = int.Parse(dr["CurrentLocationId"].ToString());

    if (!(dr["ShelfNumber"] is System.DBNull)) 
       boxTransaction.SHELFNUMBER = int.Parse(dr["ShelfNumber"].ToString());

    if (!(dr["CabinetNumber"] is System.DBNull)) 
       boxTransaction.CABINETNUMBER = int.Parse(dr["CabinetNumber"].ToString());

    //boxTransaction.NUMBEROFDOCUMENTS = int.Parse(dr["NumberOfDocuments"].ToString());
};

long x;
bool y;
LPPFAObj.AddBoxTransaction(boxTransaction,out x, out y); 

这里是配置文件:

<services>
  <service name="TestService.Test" behaviorConfiguration="svcBeh">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:81/ITest"/>
      </baseAddresses>
    </host>
    <endpoint address="" binding="basicHttpBinding" contract="TestService.ITest"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="svcBeh">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

【问题讨论】:

  • @nvoigt,我已经有了这个注释,我可以轻松地交换值类型,只有当我尝试导出用户定义的类型时,我发现所有属性都是空的。此外,我用来生成代理的向导没有任何设置,因为我正在使用 Add WebReference 菜单。

标签: c# wcf windows-mobile


【解决方案1】:

您的类对象需要为类本身和您想要传输的所有成员进行数据注释。

例子:

[DataContract]
public class Data
{
  [DataMember]
  public string Member { get; set; }
}

对于您的列表和数组,您可以在生成代理客户端的向导中设置该功能。 WCF 只会传输集合,由您决定是否要将它们表示为数组或 C# 中的一种列表。

你的合约没有说明名为 x 和 y 的 out 参数,它们是从哪里来的?

【讨论】:

    【解决方案2】:

    我找到了解决方案。我必须将以下属性设置为 true 才能将其传递给服务:

    BOXTRANSACTION boxTransaction = new BOXTRANSACTION();
    {
       boxTransaction.BOXID = long.Parse(dr["BoxId"].ToString());
       boxTransaction.BOXIDSpecified = true;
       boxTransaction.TRANSACTIONDATE = DateTime.Parse(dr["TransactionDate"].ToString());
       boxTransaction.TRANSACTIONDATESpecified = true;
    
       [...]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 2011-06-04
      • 2011-08-28
      相关资源
      最近更新 更多