Search code examples
c#wcfcompact-framework

How long time should a wcf call from Compact framework on windows mobile take?


I call a wcf service method with a int parameter, and it returns an order object like below. It takes about 1,5 second to return the object is this normal or is it too slow for WCF? The Object has 1 Order, 2 OrderLines, and 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; }

} 

Thank you!


Solution

  • The time is composed from:

    • Connecting from source (CF) to target (Server)
    • Transforming objects to pure data (propably XML)
    • Sending data through internet connection from source to target
    • Transforming pure data to objects (C#)
    • Processing method on server
    • Tranforming objects to pure data (on server)
    • Sending data through internet connection from target to source
    • Transforming pure data to objects (on CF)
    • So any of the step can take long time.

    From my experience, the WCF is pretty fast. I recommend some profiling to find what is the bottleneck in your case.