将对象从Windows Mobile 6应用程序发送到wcf服务时,对象属性设置为null

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将对象从Windows Mobile 6应用程序发送到wcf服务时,对象属性设置为null相关的知识,希望对你有一定的参考价值。

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

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

另一个问题,当我创建服务代理时,我发现所有通用参数(ex List<Customer>)都转换为数组(ex 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>
答案

您的类对象需要类本身的数据注释以及您希望传输的所有成员。

例:

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

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

你的合同没有说明名为x和y的参数,它们来自哪里?

另一答案

我找到了解决方案。我必须将以下属性设置为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;

   [...]

以上是关于将对象从Windows Mobile 6应用程序发送到wcf服务时,对象属性设置为null的主要内容,如果未能解决你的问题,请参考以下文章

将 Windows-mobile 6.5 应用程序连接到 PC 上的 sqlite 数据库

Windows Mobile 6.5 C# 开发:从哪里开始?

将 Windows Mobile 6.1 应用程序转换为 Android

ILockBytes Windows Mobile 6.5

Windows Mobile 6.0/6.5 - 推送通知

为 Windows Mobile 6.1 选项编写应用程序? [关闭]