Сколько времени должен занимать вызов wcf из Compact Framework на Windows Mobile? - PullRequest
1 голос
/ 11 мая 2011

Я вызываю сервисный метод wcf с параметром int, и он возвращает объект заказа, как показано ниже. Требуется около 1,5 секунды, чтобы вернуть объект, это нормально или это слишком медленно для WCF? Объект имеет 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 ]

1 голос
/ 11 мая 2011

1,5 секунды может быть правильным (вы обсуждаете, возможно, передачу больших объемов данных на мобильное устройство) или это может быть очень медленно. Что вам нужно сделать, это начать сужать скорость «проблема», чтобы увидеть, если это проблема. Выясните, сколько данных передается, чтобы увидеть, является ли это просто временем передачи (медленная сеть и т. Д.). Выясните, является ли это намного более производительным соединением из настольного приложения (которое поместило бы его на передачу или на стороне клиента обработка). Выясните, занимает ли сервер большую часть времени. Если последнее верно, профилируйте свой код, чтобы выяснить, есть ли где-нибудь узкое место.

Мы не можем сказать вам, хорошая ли это производительность или нет, потому что у нас есть только одна из тысячи переменных. Вот вещи, которые в целом сделали бы его время нормальным:

  • Большая передача данных
  • Длительное время обработки (много работы на сервере)
  • Время обработки клиента (много работы, когда он прибудет)

Вот вещи, которые могут замедлить этот сервис:

  • Медленная база данных
  • Сетевая задержка или узкие места
  • Проблемы с памятью клиента
  • Неоптимизированный код сервера
  • Неизвестные задержки где-то в процессе (ожидание в другой службе и т. Д.)

Вам нужно будет провести полное расследование, чтобы выяснить, что на самом деле означают 1,5 секунды. Вы можете обнаружить, что это прекрасное время, или вы можете обнаружить, что можете сделать это намного меньше.

0 голосов
/ 11 мая 2011

Одна вещь, которую вы можете сделать, чтобы сузить узкое место в производительности, - это узнать, сколько времени потребуется для вызова службы с компьютера, на котором запущена служба.Если это занимает 0,25 секунды, то вы знаете, что у вас есть 1,25 секунды времени передачи / времени обработки клиента.Если это занимает 1,45 секунды, вы можете сказать: «Хорошо, 500 миллисекунд по сети - это довольно быстро».

0 голосов
/ 11 мая 2011

Время составлено из:

  • Подключение от источника (CF) к цели (Сервер) * * 1004
  • Преобразование объектов в чистые данные (возможно XML)
  • Отправка данных через интернет соединение от источника к цели
  • Преобразование чистых данных в объекты (С #)
  • Метод обработки на сервере
  • Преобразование объектов в чистые данные (включено сервер)
  • Отправка данных через интернет соединение от цели к источнику
  • Преобразование чистых данных в объекты (включено CF)
  • Так что любой шаг может занять много времени время.

По моему опыту, WCF довольно быстрый. Я рекомендую некоторые профилирования, чтобы найти узкое место в вашем случае.

...