在Windows Mobile上从Compact框架调用wcf需要多长时间?

时间:2011-05-11 13:56:12

标签: c# wcf compact-framework

我使用int参数调用wcf服务方法,并返回如下所示的订单对象。返回对象需要大约1.5秒这是正常的还是WCF太慢了? Object有1个Order,2个OrderLines和1个OrderLineModifier。

[DataContract]
[KnownType(typeof(OrderLine))]
public class OrderDTO
{


    public OrderDTO()
    {
        this.OrderLines= new OrderLineDtos();
    }

    [DataMember]
    public ObjectState State { get; set; }

    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public int? TableId { get; set; }

    [DataMember]
    public byte OrderStateId { get; set; }

    [DataMember]
    public byte OrderTypeId { get; set; }

    [DataMember]
    public string OrderCounter { get; set; }

    [DataMember]
    public DateTime OrderDateTime { get; set; }

    [DataMember]
    public DateTime LastStateDateTime { get; set; }

    [DataMember]
    public int? SalesPersonId { get; set; }

    [DataMember]
    public int MachineId { get; set; }

    [DataMember]
    public string Comments { get; set; }

    [DataMember]
    public decimal Value { get; set; }

    [DataMember]
    public decimal VatValue { get; set; }

    [DataMember]
    public string OrderIdentifier { get; set; }

    [DataMember]
    public int? CustomerId { get; set; }

    [DataMember]
    public byte[] Timestamp { get; set; }

    [DataMember]
    public bool IsPrinted { get; set; }

    [DataMember]
    public int? WorkShiftId { get; set; }

    [DataMember]
    public decimal TotalValue { get; set; }

    [DataMember]
    public int? EmployeeId { get; set; }

    [DataMember]
    public OrderLineDtos OrderLines { get; set; }

}

[CollectionDataContract]
public class OrderLineDtos : List<OrderLineDTO>
{

}
[DataContract]
[KnownType(typeof(OrderLineModifier))]
public class OrderLineDTO
{

    public OrderLineDTO()
    {
        this.OrderLineModifiers = new List<OrderLineModifierDTO>();
    }

    [DataMember]
    public ObjectState State { get; set; }

    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public int OrderId { get; set; }

    [DataMember]
    public byte OrderLineStateId { get; set; }

    [DataMember]
    public System.DateTime LastStateDateTime { get; set; }

    [DataMember]
    public int ProductId { get; set; }

    [DataMember]
    public string ProductCode { get; set; }

    [DataMember]
    public string ProductName { get; set; }

    [DataMember]
    public decimal Quantity { get; set; }

    [DataMember]
    public decimal UnitPrice { get; set; }

    [DataMember]
    public decimal UnitPriceWithVatValue { get; set; }

            [DataMember]
    public decimal VatRate { get; set; }

    [DataMember]
    public decimal DiscountValue { get; set; }

    [DataMember]
    public decimal VatValue { get; set; }

    [DataMember]
    public decimal DiscountPercent { get; set; }

    [DataMember]
    public decimal LineTotal { get; set; }

    [DataMember]
    public string Comments { get; set; }

    [DataMember]
    public byte[] Timestamp { get; set; }

    [DataMember]
    public bool IsTreated { get; set; }

    [DataMember]
    public short? VatRateId { get; set; }

    [DataMember]
    public List<OrderLineModifierDTO> OrderLineModifiers { get; set; }

}



[DataContract]
public partial class OrderLineModifierDTO
{

    [DataMember]
    public ObjectState State { get; set; }

    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public int OrderLineId { get; set; }

    [DataMember]
    public int MenuItemOptionId { get; set; }

    [DataMember]
    public decimal Quantity { get; set; }

    [DataMember]
    public decimal UnitPrice { get; set; }

    [DataMember]
    public int MesureUnitId { get; set; }

    [DataMember]
    public string Comments { get; set; }

} 

谢谢!

3 个答案:

答案 0 :(得分:1)

1.5秒可能恰到好处(您正在讨论可能向移动设备传输大量数据),或者它可能非常慢。你需要做的是开始缩小速度“问题”,看看它是否是一个问题。弄清楚传输了多少数据以查看它是否仅仅是一个传输时间的东西(慢速网络等)。弄清楚它是否更高效地连接桌面应用程序(将它放在传输或客户端)处理)。弄清楚服务器是否花费了大部分时间。如果后者为真,请对代码进行分析,以确定某处是否存在瓶颈。

我们不能告诉你这是否是一个好的表现,因为我们只有一千个变量中的一个。通常,以下是使其时间正常的事情:

  • 大数据传输
  • 处理时间长(服务器上要做的很多工作)
  • 客户端处理时间(一旦到达就要做很多工作)

以下是可能会降低此服务速度的因素:

  • 慢数据库
  • 网络延迟或瓶颈
  • 客户端内存问题
  • 未经优化的服务器代码
  • 过程中的某处未知延迟(等待其他服务等)

您需要进行全面调查,以确定1.5秒的真正含义。你可能会发现这是一个美好的时光,或者你可能会发现你可以做得更少。

答案 1 :(得分:0)

时间由:

组成
  • 从源(CF)连接到目标 (服务器)
  • 将对象转换为纯数据 (可能是XML)
  • 通过互联网发送数据 从源到目标的连接
  • 将纯数据转换为对象 (C#)
  • 服务器上的处理方法
  • 将对象转换为纯数据(on 服务器)
  • 通过互联网发送数据 从目标到源的连接
  • 将纯数据转换为对象(on CF)
  • 所以任何一步都需要很长时间 时间。

根据我的经验,WCF非常快。我建议进行一些分析,找出你的案例中的瓶颈。

答案 2 :(得分:0)

要缩小性能瓶颈,可以做的一件事就是查看从运行服务的计算机上调用服务所需的时间。如果需要0.25秒,那么您知道您有1.25秒的传输时间/客户端处理时间。如果它需要1.45秒,那么你可以说“通过网络确定500毫秒非常快。”