Ошибка при десериализации ответа

Ошибка при десериализации ответа.
 XML


Индекс форума
» Компонент МЕРКУРИЙ
Автор Сообщение

[Post New]20/12/2019 12:09:19

    

Тема: Ошибка при десериализации ответа.

[Up]

Гасан

Зарегистрирован: 11/11/2017 13:13:22
Сообщений: 69

Оффлайн



Ошибка при десериализации ответа модуль выдает ошибку. У кого то было такая ошибка или кто знает ?


[Post New]20/12/2019 12:23:06

    

Тема: Ошибка при десериализации ответа.

[Up]

egais2018

Зарегистрирован: 08/06/2018 15:12:57
Сообщений: 282

Оффлайн



Это точно кто знает такой ошибка странный. В понятно какой модуле ее вижу. Было у кого-то? XD


[Post New]20/12/2019 12:26:08

    

Тема: Re:Ошибка при десериализации ответа.

[Up]

Гасан

Зарегистрирован: 11/11/2017 13:13:22
Сообщений: 69

Оффлайн



В модуле меркурий начало писать


[Post New]20/12/2019 12:38:21

    

Тема: Re:Ошибка при десериализации ответа.

[Up]

Yoreg07

Зарегистрирован: 21/07/2016 06:41:02
Сообщений: 572

Оффлайн



Ну не знаю … у меня всё работает


[Post New]21/12/2019 15:33:43

    

Тема: Ошибка при десериализации ответа.

[Up]

hawksib

[Avatar]

Зарегистрирован: 04/08/2017 08:44:20
Сообщений: 179

Оффлайн


Гасан wrote:Ошибка при десериализации ответа модуль выдает ошибку. У кого то было такая ошибка или кто знает ?

у меня всякие разные ошибки были, я всё исправил


 


Индекс форума
» Компонент МЕРКУРИЙ

Перейти: 

 

Error is obviously after the remote procedure/method has been executed. It’s most likely that the remote service is sending back the incorrect data or so I think. I have tried increasing the readQuote in Web.Config, that didn’t help.

Response Class

When this property (MultiSMSPostedList) is set, the value is NULL. As soon as the code comes out of get, the exception is thrown.

/// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.5485")]
    [System.SerializableAttribute()]
    //[System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.SoapTypeAttribute(Namespace="urn")]
    public partial class MessagingServices_SendMultiSMSResult : object, System.ComponentModel.INotifyPropertyChanged {

        private int sMSCountField;

        private MessagingServices_SendMultiSMS_SendSuccess[] multiSMSPostedListField;

        private MessagingServices_SendMultiSMS_SendFailed[] multiSMSRejectedListField;

        /// <remarks/>
        public int SMSCount {
            get {
                return this.sMSCountField;
            }
            set {
                this.sMSCountField = value;
                this.RaisePropertyChanged("SMSCount");
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public MessagingServices_SendMultiSMS_SendSuccess[] MultiSMSPostedList {
            get {
                return this.multiSMSPostedListField;
            }
            set {
                this.multiSMSPostedListField = value;
                this.RaisePropertyChanged("MultiSMSPostedList");
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public MessagingServices_SendMultiSMS_SendFailed[] MultiSMSRejectedList {
            get {
                return this.multiSMSRejectedListField;
            }
            set {
                this.multiSMSRejectedListField = value;
                this.RaisePropertyChanged("MultiSMSRejectedList");
            }
        }

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChanged(string propertyName) {
            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
            if ((propertyChanged != null)) {
                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }
    }

Exception
The exception text is below, it clear that exception is caused when system tries to convert variable to array.
http://justpaste.it/sms-exception

More information
Further digging shows that the remote service is returning the correct number of values, if not the format.

This property MultiSMSPostedList makes call to below class based on the number of values passed to the original procedure/method. (i.e. if I pass two phone numbers and two text messages, the properties inside MessagingServices_SendMultiSMS_SendSuccess are initialized twice, indicating remote server returned an array)

Property class

public partial class MessagingServices_SendMultiSMS_SendSuccess : object, System.ComponentModel.INotifyPropertyChanged {

        private string gRecipientNameField;

        private string gRecipientMSISDNwithCCField;

        private int gOutMsgIDField;

        /// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public string gRecipientName {
            get {
                return this.gRecipientNameField;
            }
            set {
                this.gRecipientNameField = value;
                this.RaisePropertyChanged("gRecipientName");
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public string gRecipientMSISDNwithCC {
            get {
                return this.gRecipientMSISDNwithCCField;
            }
            set {
                this.gRecipientMSISDNwithCCField = value;
                this.RaisePropertyChanged("gRecipientMSISDNwithCC");
            }
        }

        /// <remarks/>
        public int gOutMsgID {
            get {
                return this.gOutMsgIDField;
            }
            set {
                this.gOutMsgIDField = value;
                this.RaisePropertyChanged("gOutMsgID");
            }
        }

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChanged(string propertyName) {
            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
            if ((propertyChanged != null)) {
                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }
    }

I am sure, visual studio is not able to generate the class correctly based on the WSDL data, I may need to make some changes to reference.cs file. I am not an expert on the subject, so not really sure what and where should I make the change?

Could be useful

Remote service is java based, axis web service.

MORE INFO: Changes made to reference.cs

I made below changes to Response Class and it’s working without any exception. Since it’s a variable instead of array, I get only first response and all the other response values are lost.

private MessagingServices_SendMultiSMS_SendSuccess[] multiSMSPostedListField;

private MessagingServices_SendMultiSMS_SendFailed[] multiSMSRejectedListField;

I am not sure where exactly in the reference.cs I can find the location, where remote call is made/ends, may be making some changes there could help. Any suggestions?

Есть сервис расположенный по адресу https://ххх.рф (основной), у него есть API с маршрутом до него — https://ххх.рф/api/TelegramBot/AcceptReplyMessageBot:

[HttpPost("AcceptReplyMessageBot")]
        public async Task<IActionResult> AcceptReplyMessageBot([FromBody] MessageData messageData)
        {
            Friend friend;
        ResponseMessageData responseMessage;
        string jsonResponse;
        string numberPhone = messageData.PhoneNumber != null ? ServicePhoneNumber.LeaveOnlyNumbers(messageData.PhoneNumber) : null;
        if (numberPhone != null && numberPhone.Length > 10)
        {
            friend = _serviceFriends.FindUserByPhoneNumber(numberPhone);
        }
        else
        {
            responseMessage = new ResponseMessageData { Status = "Invalid phone number" };
            return Ok(responseMessage);
        }

        string textQrCode;
        Byte[] byteCode = null;

        if (friend != null) {
            textQrCode = friend.TextQRcode;
        }
        else
        {
            responseMessage = new ResponseMessageData { Status = "Not found" };
            return Ok(responseMessage);
        }

        if(friend.ByteQrcode != null)
        {
            byteCode = friend.ByteQrcode;
        }

        if(textQrCode != null && byteCode != null)
        {
            responseMessage = new ResponseMessageData { PhoneNumber = friend.Telephone, TextMessage = textQrCode, ByteQrcode = byteCode };
        }
        else if (textQrCode != null)
        {
            responseMessage = new ResponseMessageData { PhoneNumber = friend.Telephone, TextMessage = textQrCode};
        }
        else
        {
            responseMessage = new ResponseMessageData { TextMessage = "Участнику с данным номером телефона не присвоен QR-код!" };
        }
        //jsonResponse = JsonSerializer.Serialize(responseMessage);

        return Ok(responseMessage);
        }

Есть другой микро сервис по адресу https://messanger.ххх.рф (TLmessenger), который отправляет на вышеописанный основной сервис POST запросы и обрабатывает от него ответы:

[HttpPost]
public async Task<IActionResult> Post([FromBody] Update update)
{

    if (update == null) return Ok();

    string responseMessage = "";
    if (message != null)
    {
        responseMessage = "Укажите номер в федеральном формате (+7хххххххххх)";

        if (message.ReplyToMessage != null)
        {
            string messageNumberPhone;
            switch (message.ReplyToMessage.Text)
            {
                case "Укажите номер в федеральном формате (+7хххххххххх)":
                    messageNumberPhone = ServicePhoneNumber.LeaveOnlyNumbers(message.Text);

                    if (messageNumberPhone.Length < 11 || messageNumberPhone.Length > 12)
                    {
                        await _telegramBotClient.SendTextMessageAsync(message.From.Id, "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)", ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
                    }
                    else
                    {
                        MessageData requestMessage = _messageDataService.CreateMessageData(update, this.HttpContext.Request.Host.Value.ToString());

                        // Отправка запроса на API др. сервиса
                        string jsonRequest = JsonSerializer.Serialize(requestMessage);
                        string jsonResponseData = await PostRequestHttpAsync(url, jsonRequest);
                        ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);

                        if (!responseData.Status.Equals("NotFound") && responseData.TextMessage != null)
                        {
                            string responseMessageFromDB = responseData.TextMessage;
                            await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
                        }
                        else {
                            string responseMessageFromDB = "Участник с данным номером телефона не найден!";
                            await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
                        }
                    }
                    break;

                case "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)":
                    messageNumberPhone = ServicePhoneNumber.LeaveOnlyNumbers(message.Text);

                    if (messageNumberPhone.Length < 11 || messageNumberPhone.Length > 12)
                    {
                        await _telegramBotClient.SendTextMessageAsync(message.From.Id, "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)", ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
                    }
                    else
                    {
                        MessageData requestMessage = _messageDataService.CreateMessageData(update, this.HttpContext.Request.Host.Value.ToString());
                        // Отправка запроса на API др. сервиса
                        string jsonRequest = JsonSerializer.Serialize(requestMessage);
                        string jsonResponseData = await PostRequestHttpAsync(url, jsonRequest);
                        ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);

                        if (!responseData.Status.Equals("NotFound") && responseData.TextMessage != null)
                        {
                            string responseMessageFromDB = responseData.TextMessage;
                            await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
                        }
                        else
                        {
                            string responseMessageFromDB = "Участник с данным номером телефона не найден!";
                            await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
                        }
                    }
                    break;
            }
        }
        else
        {
            await _telegramBotClient.SendTextMessageAsync(message.From.Id, responseMessage, ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
        }
    }

    return Ok();
}

// Функция отправки запроса на API др. сервиса 
[ApiExplorerSettings(IgnoreApi = true)]
public async Task<string> PostRequestHttpAsync(string url, string json)
{
     using HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
        HttpClient httpClient = _clientFactory.CreateClient();
        httpClient.Timeout = TimeSpan.FromSeconds(120);
        using HttpResponseMessage response = await httpClient.PostAsync(url, content).ConfigureAwait(false);

        return await response.Content.ReadAsStringAsync().ConfigureAwait(false);
}

Пробовал отправлять на каждый из этих контроллеров обоих сервисов POST запросы через Postman — все отрабатывает норм.
Проверил работает ли 2-ой сервис (бот TLmessenger) отдельно без отправки запросов на основной — работает.
Добавил отправку запросов из бота TLmessenger на основной сервис — TLmessenger перестал работать.

Далее запустил первый (основной) сервис у себя на локально через ngrok, а 2-му (боту TLmessenger) прописал адрес url на который нужно слать запросы на 1-ый, который сформировал ngrok. Залил 2-ой (бота TLmessenger) на хостинг, в итоге TLmessenger сообщения из телеграмма получает, обрабатывает, отправляет POST запрос на основной сервис, основной сервис получает этот запрос отрабатывает и отправляет ответ, но TLmessenger не отвечает, по ходу не может обработать ответ.

Попробовал запустил первый (основной) сервис у себя на локально через ngrok. 2-ой (бота TLmessenger) запустил в режиме отладки на другом ПК и отправил запрос через swagger, в итоге TLmessenger сообщение из swagger получает, обрабатывает, отправляет POST запрос на основной сервис (запущенный на ngrok), основной сервис получает этот запрос отрабатывает и отправляет ответ, TLmessenger ответ получает, но когда пытается вернуть его

string jsonResponseData = await PostRequestHttpAsync(url, jsonRequest);
                ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);
                string str = responseData.Status;
                return Ok(str);

получаю ошибку:

204 Undocumented Response headers  date: Thu30 Sep 2021 04:58:28 GMT   server: Microsoft-IIS/10.0   x-powered-by: ASP.NET

Не пойму в чем проблема.

Скрины ответа полученного от основного сервиса из отладчика:
введите сюда описание изображения

введите сюда описание изображения

Запустил оба сервиса на одном хосте, но на разных портах с помощью Kestral. При тестировании выдало следующею ошибку:

Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
Failed to determine the https port for redirect.
System.Text.Json.JsonException: ‘T’ is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.
—> System.Text.Json.JsonReaderException: ‘T’ is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0.
at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8Js onReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan1 bytes) at System.Text.Json.Utf8JsonReader.ConsumeValue(Byte marker) at System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte first) at System.Text.Json.Utf8JsonReader.ReadSingleSegment() at System.Text.Json.Utf8JsonReader.Read() at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8 JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
— End of inner exception stack trace —
at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, JsonReaderException ex)
at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8 JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
at System.Text.Json.JsonSerializer.ReadCore[TValue](JsonConverter jsonConverter, Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
at System.Text.Json.JsonSerializer.ReadCore[TValue](Utf8JsonReader& reader, Type returnType, JsonSerializerOptions options)
at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, Type returnType, JsonSerializerOptions options)
at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)
at TLmessanger.Controllers.TelegramListenerController.Post(Upda te update) in D:My_PROGRAMSTLmessangerControllersTelegramListenerContr oller.cs:line 179

в строке:

ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);

С основного сервиса у меня уходит ответ следующего вида:

responseMessage {TLmessanger.Models.ResponseMessageData} TLmessanger.Models.ResponseMessageData
ByteQrcode null byte[]
PhoneNumber null string
Status «Not found» string
TextMessage null string
UserName null string

  • Remove From My Forums

 locked

Ошибка десериализации помоги разабраться

  • Общие обсуждения

  • Здравствуйте форумчани,

    Пишу клиента для одной веб службу (*.wsdl) находящейся в интернете. Опыта в этих делах маловато у меня. Вот столкнулся с ошибкой десериализации. С начала я авторизовываюсь на сервисе, получаю тикет. Затем формирую посылку и отправляю. На что служба мне
    выдает вот такой ответ:

    <?xml version="1.0" encoding="utf-8" ?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <soapenv:Body>
      <SendProbeDataRequestResponse xmlns="http://probewebservices.traffic.com/schemas/v1_0/Probe" />
     </soapenv:Body>
    </soapenv:Envelope>
    

    На что дебагер ругается вот таким сообщением:
    Ошибка десериализации тела ответного сообщения для операции «sendProbeData». Ожидался элемент End «Body» из пространства
    имен «http://schemas.xmlsoap.org/soap/envelope/». Найден элемент «SendProbeDataRequestResponse» из пространства имен
    «http://probewebservices.traffic.com/schemas/v1_0/Probe». Строка 1, позиция 322.
    Как я понимаю при десериализации должно было вернутся вот такой ответ от службы согласно автосгенерированому коду по *.wsdl и .xsd

    <?xml version="1.0" encoding="utf-8" ?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <soapenv:Body>
     </soapenv:Body>
    </soapenv:Envelope>
    
    //------------------------------------------------------------------------------
    // <auto-generated>
    //   Этот код создан программой.
    //   Исполняемая версия:4.0.30319.235
    //
    //   Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
    //   повторной генерации кода.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    namespace Navteq_NoJava_ConsoleApplication.NavteqProbe {
      
      
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      [System.ServiceModel.ServiceContractAttribute(Namespace="http://probewebservices.traffic.com/services/v1_0/Probe", ConfigurationName="NavteqProbe.ProbePortType")]
      public interface ProbePortType {
        
        // CODEGEN: Контракт генерации сообщений с операцией sendProbeData не является ни RPC, ни упакованным документом.
        [System.ServiceModel.OperationContractAttribute(IsOneWay=false, Action="http://probewebservices.traffic.com/sendProbeData")]
        [System.ServiceModel.FaultContractAttribute(typeof(string), Action="http://probewebservices.traffic.com/sendProbeData", Name="WebServiceFault", Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebService")]
        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
        void sendProbeData(Navteq_NoJava_ConsoleApplication.NavteqProbe.sendProbeData request);
        
        // CODEGEN: Контракт генерации сообщений с операцией pingProbe не является ни RPC, ни упакованным документом.
        [System.ServiceModel.OperationContractAttribute(Action="http://probewebservices.traffic.com/pingProbe", ReplyAction="*")]
        [System.ServiceModel.FaultContractAttribute(typeof(string), Action="http://probewebservices.traffic.com/pingProbe", Name="WebServiceFault", Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebService")]
        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
        Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeResponse pingProbe(Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeRequest request);
      }
      
      /// <remarks/>
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
      [System.SerializableAttribute()]
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.ComponentModel.DesignerCategoryAttribute("code")]
      [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebServiceClientContext")]
      public partial class WebServiceClientContext : object, System.ComponentModel.INotifyPropertyChanged {
        
        private string ticketField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=0)]
        public string ticket {
          get {
            return this.ticketField;
          }
          set {
            this.ticketField = value;
            this.RaisePropertyChanged("ticket");
          }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
          System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
          if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
          }
        }
      }
      
      /// <remarks/>
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
      [System.SerializableAttribute()]
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.ComponentModel.DesignerCategoryAttribute("code")]
      [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/Probe")]
      public partial class GeoLocation : object, System.ComponentModel.INotifyPropertyChanged {
        
        private float latitudeField;
        
        private float longitudeField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=0)]
        public float latitude {
          get {
            return this.latitudeField;
          }
          set {
            this.latitudeField = value;
            this.RaisePropertyChanged("latitude");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=1)]
        public float longitude {
          get {
            return this.longitudeField;
          }
          set {
            this.longitudeField = value;
            this.RaisePropertyChanged("longitude");
          }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
          System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
          if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
          }
        }
      }
      
      /// <remarks/>
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
      [System.SerializableAttribute()]
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.ComponentModel.DesignerCategoryAttribute("code")]
      [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/Probe")]
      public partial class GlobalPosition : object, System.ComponentModel.INotifyPropertyChanged {
        
        private GeoLocation geoLocField;
        
        private System.Nullable<int> headingField;
        
        private bool headingFieldSpecified;
        
        private System.Nullable<int> speedField;
        
        private bool speedFieldSpecified;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=0)]
        public GeoLocation geoLoc {
          get {
            return this.geoLocField;
          }
          set {
            this.geoLocField = value;
            this.RaisePropertyChanged("geoLoc");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=1)]
        public System.Nullable<int> heading {
          get {
            return this.headingField;
          }
          set {
            this.headingField = value;
            this.RaisePropertyChanged("heading");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool headingSpecified {
          get {
            return this.headingFieldSpecified;
          }
          set {
            this.headingFieldSpecified = value;
            this.RaisePropertyChanged("headingSpecified");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=2)]
        public System.Nullable<int> speed {
          get {
            return this.speedField;
          }
          set {
            this.speedField = value;
            this.RaisePropertyChanged("speed");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool speedSpecified {
          get {
            return this.speedFieldSpecified;
          }
          set {
            this.speedFieldSpecified = value;
            this.RaisePropertyChanged("speedSpecified");
          }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
          System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
          if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
          }
        }
      }
      
      /// <remarks/>
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
      [System.SerializableAttribute()]
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.ComponentModel.DesignerCategoryAttribute("code")]
      [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/Probe")]
      public partial class ProbeData : object, System.ComponentModel.INotifyPropertyChanged {
        
        private string deviceAddressField;
        
        private string deviceTypeField;
        
        private string deviceSubTypeField;
        
        private string sourceIdField;
        
        private GlobalPosition globalPositionField;
        
        private System.DateTime collectionTimeGMTField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=0)]
        public string deviceAddress {
          get {
            return this.deviceAddressField;
          }
          set {
            this.deviceAddressField = value;
            this.RaisePropertyChanged("deviceAddress");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=1)]
        public string deviceType {
          get {
            return this.deviceTypeField;
          }
          set {
            this.deviceTypeField = value;
            this.RaisePropertyChanged("deviceType");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=2)]
        public string deviceSubType {
          get {
            return this.deviceSubTypeField;
          }
          set {
            this.deviceSubTypeField = value;
            this.RaisePropertyChanged("deviceSubType");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=3)]
        public string sourceId {
          get {
            return this.sourceIdField;
          }
          set {
            this.sourceIdField = value;
            this.RaisePropertyChanged("sourceId");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=4)]
        public GlobalPosition globalPosition {
          get {
            return this.globalPositionField;
          }
          set {
            this.globalPositionField = value;
            this.RaisePropertyChanged("globalPosition");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=5)]
        public System.DateTime collectionTimeGMT {
          get {
            return this.collectionTimeGMTField;
          }
          set {
            this.collectionTimeGMTField = value;
            this.RaisePropertyChanged("collectionTimeGMT");
          }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
          System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
          if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
          }
        }
      }
      
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
      [System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
      public partial class sendProbeData {
        
        [System.ServiceModel.MessageHeaderAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebServiceClientContext")]
        public Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement;
        
        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/Probe", Order=0)]
        [System.Xml.Serialization.XmlArrayItemAttribute("probeData", IsNullable=false)]
        public ProbeData[] SendProbeDataRequest;
        
        public sendProbeData() {
        }
        
        public sendProbeData(Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement, ProbeData[] SendProbeDataRequest) {
          this.WebServiceClientContextElement = WebServiceClientContextElement;
          this.SendProbeDataRequest = SendProbeDataRequest;
        }
      }
      
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
      [System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
      public partial class pingProbeRequest {
        
        [System.ServiceModel.MessageHeaderAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebServiceClientContext")]
        public Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement;
        
        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebService", Order=0)]
        public string PlaceHolder;
        
        public pingProbeRequest() {
        }
        
        public pingProbeRequest(Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement, string PlaceHolder) {
          this.WebServiceClientContextElement = WebServiceClientContextElement;
          this.PlaceHolder = PlaceHolder;
        }
      }
      
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
      [System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
      public partial class pingProbeResponse {
        
        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebService", Order=0)]
        public string Ping;
        
        public pingProbeResponse() {
        }
        
        public pingProbeResponse(string Ping) {
          this.Ping = Ping;
        }
      }
      
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      public interface ProbePortTypeChannel : Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType, System.ServiceModel.IClientChannel {
      }
      
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      public partial class ProbePortTypeClient : System.ServiceModel.ClientBase<Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType>, Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType {
        
        public ProbePortTypeClient() {
        }
        
        public ProbePortTypeClient(string endpointConfigurationName) : 
            base(endpointConfigurationName) {
        }
        
        public ProbePortTypeClient(string endpointConfigurationName, string remoteAddress) : 
            base(endpointConfigurationName, remoteAddress) {
        }
        
        public ProbePortTypeClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
            base(endpointConfigurationName, remoteAddress) {
        }
        
        public ProbePortTypeClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
            base(binding, remoteAddress) {
        }
        
        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
        void Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType.sendProbeData(Navteq_NoJava_ConsoleApplication.NavteqProbe.sendProbeData request) {
          base.Channel.sendProbeData(request);
        }
        
        public void sendProbeData(Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement, ProbeData[] SendProbeDataRequest) {
          Navteq_NoJava_ConsoleApplication.NavteqProbe.sendProbeData inValue = new Navteq_NoJava_ConsoleApplication.NavteqProbe.sendProbeData();
          inValue.WebServiceClientContextElement = WebServiceClientContextElement;
          inValue.SendProbeDataRequest = SendProbeDataRequest;
          ((Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType)(this)).sendProbeData(inValue);
        }
        
        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
        Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeResponse Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType.pingProbe(Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeRequest request) {
          return base.Channel.pingProbe(request);
        }
        
        public string pingProbe(Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement, string PlaceHolder) {
          Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeRequest inValue = new Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeRequest();
          inValue.WebServiceClientContextElement = WebServiceClientContextElement;
          inValue.PlaceHolder = PlaceHolder;
          Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeResponse retVal = ((Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType)(this)).pingProbe(inValue);
          return retVal.Ping;
        }
      }
    }
    
    
    • Изменен тип

      11 июля 2011 г. 9:57

Ошибка при десериализации ответа.
 XML


Индекс форума
» Компонент МЕРКУРИЙ
Автор Сообщение

[Post New]20/12/2019 12:09:19

    

Тема: Ошибка при десериализации ответа.

[Up]

Гасан

Зарегистрирован: 11/11/2017 13:13:22
Сообщений: 69

Оффлайн


Ошибка при десериализации ответа модуль выдает ошибку. У кого то было такая ошибка или кто знает ?


[Post New]20/12/2019 12:23:06

    

Тема: Ошибка при десериализации ответа.

[Up]

egais2018

Зарегистрирован: 08/06/2018 15:12:57
Сообщений: 282

Оффлайн


Это точно кто знает такой ошибка странный. В понятно какой модуле ее вижу. Было у кого-то? XD


[Post New]20/12/2019 12:26:08

    

Тема: Re:Ошибка при десериализации ответа.

[Up]

Гасан

Зарегистрирован: 11/11/2017 13:13:22
Сообщений: 69

Оффлайн


В модуле меркурий начало писать


[Post New]20/12/2019 12:38:21

    

Тема: Re:Ошибка при десериализации ответа.

[Up]

Yoreg07

Зарегистрирован: 21/07/2016 06:41:02
Сообщений: 572

Оффлайн


Ну не знаю … у меня всё работает


[Post New]21/12/2019 15:33:43

    

Тема: Ошибка при десериализации ответа.

[Up]

hawksib

[Avatar]

Зарегистрирован: 04/08/2017 08:44:20
Сообщений: 179

Оффлайн

Гасан wrote:Ошибка при десериализации ответа модуль выдает ошибку. У кого то было такая ошибка или кто знает ?

у меня всякие разные ошибки были, я всё исправил



Индекс форума
» Компонент МЕРКУРИЙ

Using Visual Studio 2010, I’m calling SOAP webservices and keep getting the error «Error in deserializing body of reply message«.

I call the WS method like this:

    wsConfig.config_pttClient client = new wsConfig.config_pttClient();
    wsConfig.getConfigInput gci = new wsConfig.getConfigInput();
    wsConfig.getConfigOutput gco = new wsConfig.getConfigOutput();

    gco = client.getConfig(gci); // the exception is thrown here

The method doesn’t need input data: I test it using SoapUI and it works fine. Using fiddler, I see the call is made and the answer with all the data correct.

After researching for a while, I tried to alter the readerQuotas like maxStringContentLength, maxDepth etc. inside the xsd but no luck.

I got a little workaround for the getConfig method though: when I alter the Reference.cs file and change the System.DateTime variable types to string, it works fine but then I need to invoke a setConfig method, and that alteration brings another problem… Also, I’ve read that altering the webservice contract isn’t a good practice.

I’ve been looking for a solution for a while now and here are some places I checked: this, this, this or this.

Can someone help?
Thanks

Есть сервис расположенный по адресу https://ххх.рф (основной), у него есть API с маршрутом до него — https://ххх.рф/api/TelegramBot/AcceptReplyMessageBot:

[HttpPost("AcceptReplyMessageBot")]
        public async Task<IActionResult> AcceptReplyMessageBot([FromBody] MessageData messageData)
        {
            Friend friend;
        ResponseMessageData responseMessage;
        string jsonResponse;
        string numberPhone = messageData.PhoneNumber != null ? ServicePhoneNumber.LeaveOnlyNumbers(messageData.PhoneNumber) : null;
        if (numberPhone != null && numberPhone.Length > 10)
        {
            friend = _serviceFriends.FindUserByPhoneNumber(numberPhone);
        }
        else
        {
            responseMessage = new ResponseMessageData { Status = "Invalid phone number" };
            return Ok(responseMessage);
        }

        string textQrCode;
        Byte[] byteCode = null;

        if (friend != null) {
            textQrCode = friend.TextQRcode;
        }
        else
        {
            responseMessage = new ResponseMessageData { Status = "Not found" };
            return Ok(responseMessage);
        }

        if(friend.ByteQrcode != null)
        {
            byteCode = friend.ByteQrcode;
        }

        if(textQrCode != null && byteCode != null)
        {
            responseMessage = new ResponseMessageData { PhoneNumber = friend.Telephone, TextMessage = textQrCode, ByteQrcode = byteCode };
        }
        else if (textQrCode != null)
        {
            responseMessage = new ResponseMessageData { PhoneNumber = friend.Telephone, TextMessage = textQrCode};
        }
        else
        {
            responseMessage = new ResponseMessageData { TextMessage = "Участнику с данным номером телефона не присвоен QR-код!" };
        }
        //jsonResponse = JsonSerializer.Serialize(responseMessage);

        return Ok(responseMessage);
        }

Есть другой микро сервис по адресу https://messanger.ххх.рф (TLmessenger), который отправляет на вышеописанный основной сервис POST запросы и обрабатывает от него ответы:

[HttpPost]
public async Task<IActionResult> Post([FromBody] Update update)
{

    if (update == null) return Ok();

    string responseMessage = "";
    if (message != null)
    {
        responseMessage = "Укажите номер в федеральном формате (+7хххххххххх)";

        if (message.ReplyToMessage != null)
        {
            string messageNumberPhone;
            switch (message.ReplyToMessage.Text)
            {
                case "Укажите номер в федеральном формате (+7хххххххххх)":
                    messageNumberPhone = ServicePhoneNumber.LeaveOnlyNumbers(message.Text);

                    if (messageNumberPhone.Length < 11 || messageNumberPhone.Length > 12)
                    {
                        await _telegramBotClient.SendTextMessageAsync(message.From.Id, "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)", ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
                    }
                    else
                    {
                        MessageData requestMessage = _messageDataService.CreateMessageData(update, this.HttpContext.Request.Host.Value.ToString());

                        // Отправка запроса на API др. сервиса
                        string jsonRequest = JsonSerializer.Serialize(requestMessage);
                        string jsonResponseData = await PostRequestHttpAsync(url, jsonRequest);
                        ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);

                        if (!responseData.Status.Equals("NotFound") && responseData.TextMessage != null)
                        {
                            string responseMessageFromDB = responseData.TextMessage;
                            await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
                        }
                        else {
                            string responseMessageFromDB = "Участник с данным номером телефона не найден!";
                            await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
                        }
                    }
                    break;

                case "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)":
                    messageNumberPhone = ServicePhoneNumber.LeaveOnlyNumbers(message.Text);

                    if (messageNumberPhone.Length < 11 || messageNumberPhone.Length > 12)
                    {
                        await _telegramBotClient.SendTextMessageAsync(message.From.Id, "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)", ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
                    }
                    else
                    {
                        MessageData requestMessage = _messageDataService.CreateMessageData(update, this.HttpContext.Request.Host.Value.ToString());
                        // Отправка запроса на API др. сервиса
                        string jsonRequest = JsonSerializer.Serialize(requestMessage);
                        string jsonResponseData = await PostRequestHttpAsync(url, jsonRequest);
                        ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);

                        if (!responseData.Status.Equals("NotFound") && responseData.TextMessage != null)
                        {
                            string responseMessageFromDB = responseData.TextMessage;
                            await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
                        }
                        else
                        {
                            string responseMessageFromDB = "Участник с данным номером телефона не найден!";
                            await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
                        }
                    }
                    break;
            }
        }
        else
        {
            await _telegramBotClient.SendTextMessageAsync(message.From.Id, responseMessage, ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
        }
    }

    return Ok();
}

// Функция отправки запроса на API др. сервиса 
[ApiExplorerSettings(IgnoreApi = true)]
public async Task<string> PostRequestHttpAsync(string url, string json)
{
     using HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
        HttpClient httpClient = _clientFactory.CreateClient();
        httpClient.Timeout = TimeSpan.FromSeconds(120);
        using HttpResponseMessage response = await httpClient.PostAsync(url, content).ConfigureAwait(false);

        return await response.Content.ReadAsStringAsync().ConfigureAwait(false);
}

Пробовал отправлять на каждый из этих контроллеров обоих сервисов POST запросы через Postman — все отрабатывает норм.
Проверил работает ли 2-ой сервис (бот TLmessenger) отдельно без отправки запросов на основной — работает.
Добавил отправку запросов из бота TLmessenger на основной сервис — TLmessenger перестал работать.

Далее запустил первый (основной) сервис у себя на локально через ngrok, а 2-му (боту TLmessenger) прописал адрес url на который нужно слать запросы на 1-ый, который сформировал ngrok. Залил 2-ой (бота TLmessenger) на хостинг, в итоге TLmessenger сообщения из телеграмма получает, обрабатывает, отправляет POST запрос на основной сервис, основной сервис получает этот запрос отрабатывает и отправляет ответ, но TLmessenger не отвечает, по ходу не может обработать ответ.

Попробовал запустил первый (основной) сервис у себя на локально через ngrok. 2-ой (бота TLmessenger) запустил в режиме отладки на другом ПК и отправил запрос через swagger, в итоге TLmessenger сообщение из swagger получает, обрабатывает, отправляет POST запрос на основной сервис (запущенный на ngrok), основной сервис получает этот запрос отрабатывает и отправляет ответ, TLmessenger ответ получает, но когда пытается вернуть его

string jsonResponseData = await PostRequestHttpAsync(url, jsonRequest);
                ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);
                string str = responseData.Status;
                return Ok(str);

получаю ошибку:

204 Undocumented Response headers  date: Thu30 Sep 2021 04:58:28 GMT   server: Microsoft-IIS/10.0   x-powered-by: ASP.NET

Не пойму в чем проблема.

Скрины ответа полученного от основного сервиса из отладчика:
введите сюда описание изображения

введите сюда описание изображения

Запустил оба сервиса на одном хосте, но на разных портах с помощью Kestral. При тестировании выдало следующею ошибку:

Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]
Failed to determine the https port for redirect.
System.Text.Json.JsonException: ‘T’ is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.
—> System.Text.Json.JsonReaderException: ‘T’ is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0.
at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8Js onReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan1 bytes) at System.Text.Json.Utf8JsonReader.ConsumeValue(Byte marker) at System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte first) at System.Text.Json.Utf8JsonReader.ReadSingleSegment() at System.Text.Json.Utf8JsonReader.Read() at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8 JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
— End of inner exception stack trace —
at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, JsonReaderException ex)
at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8 JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
at System.Text.Json.JsonSerializer.ReadCore[TValue](JsonConverter jsonConverter, Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
at System.Text.Json.JsonSerializer.ReadCore[TValue](Utf8JsonReader& reader, Type returnType, JsonSerializerOptions options)
at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, Type returnType, JsonSerializerOptions options)
at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)
at TLmessanger.Controllers.TelegramListenerController.Post(Upda te update) in D:My_PROGRAMSTLmessangerControllersTelegramListenerContr oller.cs:line 179

в строке:

ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);

С основного сервиса у меня уходит ответ следующего вида:

responseMessage {TLmessanger.Models.ResponseMessageData} TLmessanger.Models.ResponseMessageData
ByteQrcode null byte[]
PhoneNumber null string
Status «Not found» string
TextMessage null string
UserName null string

Я пишу консольный WCF-клиент для одного WCF-WebService. При вызове службы я получаю ошибку при десериализации тела запроса:

Ошибка десериализации тела ответного сообщения для операции «GetProfiles»

Код агента:

string  userLogin = "root", userPassword = "root";
string ipaddress = "192.168.137.164";

HttpTransportBindingElement httpTransportBindingElement = new    HttpTransportBindingElement();
httpTransportBindingElement.AuthenticationScheme = AuthenticationSchemes.Digest;
httpTransportBindingElement.KeepAliveEnabled = false;
httpTransportBindingElement.MaxBufferSize = int.MaxValue;
httpTransportBindingElement.MaxBufferPoolSize = int.MaxValue;
httpTransportBindingElement.MaxReceivedMessageSize = int.MaxValue;

TextMessageEncodingBindingElement textMessageEncodingBindingElement = new TextMessageEncodingBindingElement();
textMessageEncodingBindingElement.MaxReadPoolSize = int.MaxValue;
textMessageEncodingBindingElement.MaxWritePoolSize = int.MaxValue;
textMessageEncodingBindingElement.ReaderQuotas.MaxDepth = 64;
textMessageEncodingBindingElement.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
textMessageEncodingBindingElement.ReaderQuotas.MaxArrayLength = int.MaxValue;
textMessageEncodingBindingElement.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
textMessageEncodingBindingElement.ReaderQuotas.MaxStringContentLength = int.MaxValue;


CustomBinding binding = new CustomBinding(textMessageEncodingBindingElement, httpTransportBindingElement);

EndpointAddress MediaEndPointAddress = new EndpointAddress("http://" + ipaddress + ":80/onvif/services");

MediaClient mediaClient = new MediaClient(binding, MediaEndPointAddress);
mediaClient.ClientCredentials.UserName.UserName = userLogin;
mediaClient.ClientCredentials.UserName.Password = userPassword;

Profile[] profiles = mediaClient.GetProfiles(); // throw excpetion

Я уже смотрел запросы и ответы со сниффером, и это нормально! WebService отправил «200 OK». Если у меня есть небольшой ответ от WebService, ошибок и исключений не будет! У меня нет кода WebService. Что мне делать?

Трассировка стека:

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
<System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
<EventID>131075</EventID>
<Type>3</Type>
<SubType Name="Error">0</SubType>
<Level>2</Level>
<TimeCreated SystemTime="2012-01-11T11:11:12.2185609Z" />
<Source Name="System.ServiceModel" />
<Correlation ActivityID="{550193ea-8569-40e6-b794-1a0eed69a1ba}" />
<Execution ProcessName="TestingConsole.vshost" ProcessID="6128" ThreadID="9" />
<Channel />
<Computer>WS-LSH</Computer>
</System>
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord"    Severity="Error">
<TraceIdentifier>http://msdn.microsoft.com/ru-RU/library/System.ServiceModel.Diagnostics.ThrowingException.aspx</TraceIdentifier>
<Description>Throwing an exception.</Description>
<AppDomain>TestingConsole.vshost.exe</AppDomain>
<Exception>
<ExceptionType>System.ServiceModel.CommunicationException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>Error in deserializing body of reply message for operation 'GetProfiles'.    </Message>
<StackTrace>
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeReply(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.ProxyOperationRuntime.AfterReply(ProxyRpc&amp; rpc)
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc&amp; rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp; msgData, Int32 type)
at TestingConsole.Onvif.Media.Media.GetProfiles(GetProfilesRequest request)
at TestingConsole.Onvif.Media.MediaClient.TestingConsole.Onvif.Media.Media.GetProfiles(GetProfilesRequest request)
at TestingConsole.Onvif.Media.MediaClient.GetProfiles()
at TestingConsole.Program.Main(String[] args)
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
</StackTrace>
<ExceptionString>System.ServiceModel.CommunicationException: Error in deserializing body of reply message for operation 'GetProfiles'. ---&gt; System.InvalidOperationException: There is an error in XML document (2, 6287). ---&gt; System.Xml.XmlException: The byte 0x03 is not valid at this location.  Line 2, position 6287.
    at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
   at System.Xml.XmlExceptionHelper.ThrowInvalidXml(XmlDictionaryReader reader, Byte b)
   at System.Xml.XmlUTF8TextReader.Read()
   at System.Xml.XmlDictionaryReader.ReadString(Int32 maxStringContentLength)
   at System.Xml.XmlDictionaryReader.ReadString()
   at System.Xml.XmlBaseReader.ReadElementString()
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read59_VideoSourceConfiguration(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read150_Profile(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read224_GetProfilesResponse()
   at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer73.Deserialize(XmlSerializationReader reader)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)
   --- End of inner exception stack trace ---</ExceptionString>
<InnerException>
<ExceptionType>System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>There is an error in XML document (2, 6287).</Message>
<StackTrace>
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at     System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)
</StackTrace>
<ExceptionString>System.InvalidOperationException: There is an error in XML document (2, 6287). ---&gt; System.Xml.XmlException: The byte 0x03 is not valid at this location.  Line 2, position 6287.
   at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
   at System.Xml.XmlExceptionHelper.ThrowInvalidXml(XmlDictionaryReader reader, Byte b)
   at System.Xml.XmlUTF8TextReader.Read()
   at System.Xml.XmlDictionaryReader.ReadString(Int32 maxStringContentLength)
   at System.Xml.XmlDictionaryReader.ReadString()
   at System.Xml.XmlBaseReader.ReadElementString()
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read59_VideoSourceConfiguration(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read150_Profile(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read224_GetProfilesResponse()
   at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer73.Deserialize(XmlSerializationReader reader)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)</ExceptionString>
<InnerException>
<ExceptionType>System.Xml.XmlException, System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>The byte 0x03 is not valid at this location.  Line 2, position 6287.</Message>
<StackTrace>
at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String     res, String arg1, String arg2, String arg3)
at System.Xml.XmlExceptionHelper.ThrowInvalidXml(XmlDictionaryReader reader, Byte b)
at System.Xml.XmlUTF8TextReader.Read()
at System.Xml.XmlDictionaryReader.ReadString(Int32 maxStringContentLength)
at System.Xml.XmlDictionaryReader.ReadString()
at System.Xml.XmlBaseReader.ReadElementString()
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read59_VideoSourceConfiguration(Boolean isNullable, Boolean checkType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read150_Profile(Boolean isNullable, Boolean checkType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read224_GetProfilesResponse()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer73.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
</StackTrace>
<ExceptionString>System.Xml.XmlException: The byte 0x03 is not valid at this location.  Line 2, position 6287.
   at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
   at System.Xml.XmlExceptionHelper.ThrowInvalidXml(XmlDictionaryReader reader, Byte b)
   at System.Xml.XmlUTF8TextReader.Read()
   at System.Xml.XmlDictionaryReader.ReadString(Int32 maxStringContentLength)
   at System.Xml.XmlDictionaryReader.ReadString()
   at System.Xml.XmlBaseReader.ReadElementString()
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read59_VideoSourceConfiguration(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read150_Profile(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMedia.Read224_GetProfilesResponse()
   at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer73.Deserialize(XmlSerializationReader reader)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)</ExceptionString>
</InnerException>
</InnerException>
</Exception>
</TraceRecord>
</DataItem>
</TraceData>
</ApplicationData>

Я переписываю свой код. Теперь у меня есть:

    string soapRequest = "<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">" +
                                 "<s:Header>" +
                                 "</s:Header>" +
                                 "<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">" +
                                 "<GetProfiles xmlns="http://www.onvif.org/ver10/media/wsdl"/>" +
                                 "</s:Body>" +
                                 "</s:Envelope>";


XmlReader envelopeReader = XmlReader.Create(new StringReader(soapRequest));

Message requestMsg = Message.CreateMessage(envelopeReader, int.MaxValue, MessageVersion.Soap12);

Message responseMsg = null;

IChannelFactory<IRequestChannel> channelFactory = binding.BuildChannelFactory<IRequestChannel>();
channelFactory.Open();

IRequestChannel channel = channelFactory.CreateChannel(MediaEndPointAddress);
channel.Open();

responseMsg = channel.Request(requestMsg);
Console.WriteLine(responseMsg.ToString());

Последнее сообщение возврата строки «Ошибка чтения тела: System.Xml.XmlException:» «содержит недопустимые байты UTF8….}».

WebService отправляет байты без ut8, но указывает «UTF-8» в заголовке.
Что я могу сделать?

Тело сообщения ответа

HTTP/1.1 200 OK
Server: gSOAP/2.7
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 11591
Connection: close

<?xml version="1.0" encoding="UTF-8"?>
            <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"                         xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding"                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                       xmlns:xsd="http://www.w3.org/2001/XMLSchema"                        xmlns:wsa5="http://www.w3.org/2005/08/addressing"                       xmlns:xmime5="http://www.w3.org/2005/05/xmlmime"                        xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"                        xmlns:ter="http://www.onvif.org/ver10/error"                        xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"                      xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"                      xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#"                        xmlns:ds="http://www.w3.org/2000/09/xmldsig#"                       xmlns:tns1="http://www.onvif.org/ver10/topics"                      xmlns:ns1="http://www.onvif.org/ver20/analytics/wsdl"                       xmlns:ns2="http://www.onvif.org/ver10/schema"                       xmlns:ns3="http://docs.oasis-open.org/wsn/b-2"                      xmlns:ns4="http://docs.oasis-open.org/wsrf/bf-2"                        xmlns:ns5="http://docs.oasis-open.org/wsn/t-1"                      xmlns:ns6="http://www.onvif.org/ver10/device/wsdl"                      xmlns:ns7="http://www.onvif.org/ver10/events/wsdl"                      xmlns:ns9="http://docs.oasis-open.org/wsrf/r-2"                         xmlns:ns10="http://www.onvif.org/ver10/imaging/wsdl"                        xmlns:ns11="http://www.onvif.org/ver10/media/wsdl"                      xmlns:ns12="http://www.onvif.org/ver20/ptz/wsdl"                        xmlns:ns13="http://www.onvif.org/ver10/network/wsdl/"                       xmlns:ns14="http://schemas.xmlsoap.org/ws/2005/04/discovery"                        xmlns:ns16="http://www.onvif.org/ver10/analytics/wsdl/RuleEngineBinding"                        xmlns:ns17="http://www.onvif.org/ver10/analytics/wsdl/AnalyticsEngineBinding"                       xmlns:ns18="http://www.onvif.org/ver10/events/wsdl/PullPointSubscriptionBinding"                        xmlns:ns19="http://www.onvif.org/ver10/events/wsdl/EventBinding"                        xmlns:ns20="http://www.onvif.org/ver10/events/wsdl/SubscriptionManagerBinding"                      xmlns:ns21="http://www.onvif.org/ver10/events/wsdl/NotificationProducerBinding"                         xmlns:ns22="http://www.onvif.org/ver10/events/wsdl/NotificationConsumerBinding"                         xmlns:ns23="http://www.onvif.org/ver10/events/wsdl/PullPointBinding"                        xmlns:ns24="http://www.onvif.org/ver10/events/wsdl/CreatePullPointBinding"                      xmlns:ns25="http://www.onvif.org/ver10/events/wsdl/PausableSubscriptionManagerBinding"                      xmlns:ns26="http://www.onvif.org/ver10/network/wsdl/RemoteDiscoveryBinding"                         xmlns:ns27="http://www.onvif.org/ver10/network/wsdl/DiscoveryLookupBinding"                         xmlns:ns28="http://www.onvif.org/ver10/events/wsdl/EventPortType"                       xmlns:ns29="http://www.3svision.com.tw/2009/event/topics">                      <SOAP-ENV:Header></SOAP-ENV:Header><SOAP-ENV:Body><ns11:GetProfilesResponse><ns11:Profiles token="Main_h264" fixed="true"><ns2:Name>Main h264</ns2:Name><ns2:VideoSourceConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:SourceToken>0</ns2:SourceToken><Bounds xmlns="http://www.onvif.org/ver10/schema" height="720" width="1280" y="0" x="0"></Bounds></ns2:VideoSourceConfiguration><ns2:AudioSourceConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:SourceToken>0</ns2:SourceToken></ns2:AudioSourceConfiguration><ns2:VideoEncoderConfiguration token="Main_h264"><ns2:Name>Main h264</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:Encoding>H264</ns2:Encoding><ns2:Resolution><ns2:Width>1280</ns2:Width><ns2:Height>720</ns2:Height></ns2:Resolution><ns2:Quality>60</ns2:Quality><ns2:RateControl><ns2:FrameRateLimit>30</ns2:FrameRateLimit><ns2:EncodingInterval>15</ns2:EncodingInterval><ns2:BitrateLimit>3072</ns2:BitrateLimit></ns2:RateControl><ns2:H264><ns2:GovLength>0</ns2:GovLength><ns2:H264Profile>Baseline</ns2:H264Profile></ns2:H264><ns2:Multicast><ns2:Address><ns2:Type>IPv4</ns2:Type><ns2:IPv4Address>0.0.0.0</ns2:IPv4Address></ns2:Address><ns2:Port>0</ns2:Port><ns2:TTL>5</ns2:TTL><ns2:AutoStart>false</ns2:AutoStart></ns2:Multicast><ns2:SessionTimeout>PT0S</ns2:SessionTimeout></ns2:VideoEncoderConfiguration><ns2:AudioEncoderConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:Encoding>G7Ю11</ns2:Encoding><ns2:Bitrate>64000</ns2:Bitrate><ns2:SampleRate>8000</ns2:SampleRate><ns2:Multicast><ns2:Address><ns2:Type>IPv4</ns2:Type><ns2:IPv4Address>0.0.0.0</ns2:IPv4Address></ns2:Address><ns2:Port>0</ns2:Port><ns2:TTL>5</ns2:TTL><ns2:AutoStart>false</ns2:AutoStart></ns2:Multicast><ns2:SessionTimeout>PT0S</ns2:SessionTimeout></ns2:AudioEncoderConfiguration></ns11:Profiles><ns11:Profiles token="Sub_h264" fixed="true"><ns2:Name>Sub h264</ns2:Name><ns2:VideoSourceConfiguration token="1"><ns2:Name>user1</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:SourceToken>0</ns2:SourceToken><Bounds xmlns="http://www.onvif.org/ver10/schema" height="720" width="1280" y="0" x="0"></Bounds></ns2:VideoSourceConfiguration><ns2:AudioSourceConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:SourceToken>0</ns2:SourceToken></ns2:AudioSourceConfiguration><ns2:VideoEncoderConfiguration token="Sub_h264"><ns2:Name>Sub h264</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:Encoding>H264</ns2:Encoding><ns2:Resolution><ns2:Width>640</ns2:Width><ns2:Height>352</ns2:Height></ns2:Resolution><ns2:Quality>70</ns2:Quality><ns2:RateControl><ns2:FrameRateLimit>30</ns2:FrameRateLimit><ns2:EncodingInterval>15</ns2:EncodingInterval><ns2:BitrateLimit>3072</ns2:BitrateLimit></ns2:RateControl><ns2:H264><ns2:GovLength>0</ns2:GovLength><ns2:H264Profile>Baseline</ns2:H264Profile></ns2:H264><ns2:Multicast><ns2:Address><ns2:Type>IPv4</ns2:Type><ns2:IPv4Address>0.0.0.0</ns2:IPv4Address></ns2:Address><ns2:Port>0</ns2:Port><ns2:TTL>5</ns2:TTL><ns2:AutoStart>false</ns2:AutoStart></ns2:Multicast><ns2:SessionTimeout>PT0S</ns2:SessionTimeout></ns2:VideoEncoderConfiguration><ns2:AudioEncoderConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:Encoding>G711</ns2:Encoding><ns2:Bitrate>64000</ns2:Bitrate><ns2:SampleRate>8000</ns2:SampleRate><ns2:Multicast><ns2:Address><ns2:Type>IPv4</ns2:Type><ns2:IPv4Address>0.0.0.0</ns2:IPv4Address></ns2:Address><ns2:Port>0</ns2:Port><ns2:TTL>5</ns2:TTL><ns2:AutoStart>false</ns2:AutoStart></ns2:Multicast><ns2:SessionTimeout>PT0S</ns2:SessionTimeout></ns2:AudioEncoderConfiguration></ns11:Profiles><ns11:Profiles token="Motion_jpeg" fixed="true"><ns2:Name>Motion jpeg</ns2:Name><ns2:VideoSourceConfiguration token="2"><ns2:Name>user2</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:SourceToken>0</ns2:SourceToken><Bounds xmlns="http://www.onvif.org/ver10/schema" height="720" width="1280" y="0" x="0"></Bounds></ns2:VideoSourceConfiguration><ns2:AudioSourceConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:SourceToken>0</ns2:SourceToken></ns2:AudioSourceConfiguration><ns2:VideoEncoderConfiguration token="Motion_jpeg"><ns2:Name>Motion jpeg</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:Encoding>JPEG</ns2:Encoding><ns2:Resolution><ns2:Width>1280</ns2:Width><ns2:Height>720</ns2:Height></ns2:Resolution><ns2:QualitЭy>70</ns2:Quality><ns2:RateControl><ns2:FrameRateLimit>15</ns2:FrameRateLimit><ns2:EncodingInterval>15</ns2:EncodingInterval><ns2:BitrateLimit>3072</ns2:BitrateLimit></ns2:RateControl><ns2:Multicast><ns2:Address><ns2:Type>IPv4</ns2:Type><ns2:IPv4Address>0.0.0.0</ns2:IPv4Address></ns2:Address><ns2:Port>0</ns2:Port><ns2:TTL>5</ns2:TTL><ns2:AutoStart>false</ns2:AutoStart></ns2:Multicast><ns2:SessionTimeout>PT0S</ns2:SessionTimeout></ns2:VideoEncoderConfiguration><ns2:AudioEncoderConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:Encoding>G711</ns2:Encoding><ns2:Bitrate>64000</ns2:Bitrate><ns2:SampleRate>8000</ns2:SampleRate><ns2:Multicast><ns2:Address><ns2:Type>IPv4</ns2:Type><ns2:IPv4Address>0.0.0.0</ns2:IPv4Address></ns2:Address><ns2:Port>0</ns2:Port><ns2:TTL>5</ns2:TTL><ns2:AutoStart>false</ns2:AutoStart></ns2:Multicast><ns2:SessionTimeout>PT0S</ns2:SessionTimeout></ns2:AudioEncoderConfiguration></ns11:Profiles><ns11:Profiles token="mc_test" fixed="false"><ns2:Name>mc_test</ns2:Name><ns2:VideoSourceConfiguration token="2"><ns2:Name>Hе</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:SourceToken>0</ns2:SourceToken><Bounds xmlns="http://www.onvif.org/ver10/schema" height="720" width="1280" y="0" x="0"></Bounds></ns2:VideoSourceConfiguration><ns2:AudioSourceConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:SourceToken>0</ns2:SourceToken></ns2:AudioSourceConfiguration><ns2:VideoEncoderConfiguration token="Motion_jpeg"><ns2:Name>јч
@јч
@peg</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:Encoding>JPEG</ns2:Encoding><ns2:Resolution><ns2:Width>1280</ns2:Width><ns2:Height>720</ns2:Height></ns2:Resolution><ns2:Quality>70</ns2:Quality><ns2:RateControl><ns2:FrameRateLimit>15</ns2:FrameRateLimit><ns2:EncodingInterval>15</ns2:EncodingInterval><ns2:BitrateLimit>3072</ns2:BitrateLimit></ns2:RateControl><ns2:Multicast><ns2:Address><ns2:Type>IPv4</ns2:Type><ns2:IPv4Address>0.0.0.0</ns2:IPv4Address></ns2:Address><ns2:Port>0</ns2:Port><ns2:TTL>5</ns2:TTL><ns2:AutoStart>false</ns2:AutoStart></ns2:Multicast><ns2:SessionTimeout>PT0S</ns2:SessionTimeout></ns2:VideoEncoderConfiguration><ns2:AudioEncoderConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:Encoding>G711</ns2:Encoding><ns2:Bitrate>64000</ns2:Bitrate><ns2:SampleRate>8000</ns2:SampleRate><ns2:Multicast><ns2:Address><ns2:Type>IPv4</ns2:Type><ns2:IPv4Address>0.0.0.0</ns2:IPv4Address></ns2:Address><ns2:Port>0</ns2:Port><ns2:TTL>5</ns2:TTL><ns2:AutoStart>false</ns2:AutoStart></ns2:Multicast><ns2:SessionTimeout>PT0S</ns2:SessionTimeout></ns2:AudioEncoderConfiguration></ns11:Profiles><ns11:Profiles token="MACROSCOP" fixed="false"><ns2:Name>MACROSCOP</ns2:Name><ns2:VideoSourceConfiguration token="2"><ns2:Name>Hе</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:SourceToken>0</ns2:SourceToken><Bounds xmlns="http://www.onvif.org/ver10/schema" heightЮ="720" width="1280" y="0" x="0"></Bounds></ns2:VideoSourceConfiguration><ns2:AudioSourceConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:SourceToken>0</ns2:SourceToken></ns2:AudioSourceConfiguration><ns2:VideoEncoderConfiguration token="Motion_jpeg"><ns2:Name>јч
@јч
@peg</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:Encoding>JPEG</ns2:Encoding><ns2:Resolution><ns2:Width>1280</ns2:Width><ns2:Height>720</ns2:Height></ns2:Resolution><ns2:Quality>70</ns2:Quality><ns2:RateControl><ns2:FrameRateLimit>15</ns2:FrameRateLimit><ns2:EncodingInterval>15</ns2:EncodingInterval><ns2:BitrateLimit>3072</ns2:BitrateLimit></ns2:RateControl><ns2:Multicast><ns2:Address><ns2:Type>IPv4</ns2:Type><ns2:IPv4Address>0.0.0.0</ns2:IPv4Address></ns2:Address><ns2:Port>0</ns2:Port><ns2:TTL>5</ns2:TTL><ns2:AutoStart>false</ns2:AutoStart></ns2:Multicast><ns2:SessionTimeout>PT0S</ns2:SessionTimeout></ns2:VideoEncoderConfiguration><ns2:AudioEncoderConfiguration token="0"><ns2:Name>user0</ns2:Name><ns2:UseCount>0</ns2:UseCount><ns2:Encoding>G711</ns2:Encoding><ns2:Bitrate>64000</ns2:Bitrate><ns2:SampleRate>8000</ns2:SampleRate><ns2:Multicast><ns2:Address><ns2:Type>IPv4</ns2:Type><ns2:IPv4Address>0.0.0.0</ns2:IPv4Address></ns2:Address><ns2:Port>0</ns2:Port><ns2:TTL>5</ns2:TTL><ns2:AutoStart>false</ns2:AutoStart></ns2:Multicast><ns2:SessionTimeout>PT0S</ns2:SessionTimeout></ns2:AudioEncoderConfiguration></ns11:Profiles></ns11:GetProfilesResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

I am using third party service to get data using rest API. But sometimes it return more than 6 MB data. They don’t have API to provide data in chunks. I am already using future method to increase heap size limit to 12 MB.

With below code, I am facing heap size error at the time of de-serialization of data. I have also emphasised that line where I am getting error.

@future (callout=true)
public static void CreateProjects(set<ID> setOfProjectID)
{
    HttpRequest request;
    HttpResponse response = new HttpResponse();
    Map<Id,Opportunity> mapOfIdAndProjectToCreate = new Map<Id,Opportunity>([SELECT Id, Name, projectId__c FROM Opportunity 
                                                    WHERE ID IN :setOfProjectID]);
    Integer customerId;
    List<Opportunity> lstOppToUpdate = new List<Opportunity>();
    if(!mapOfIdAndProjectToCreate.isEmpty())
    {
        for(Id OpportunityID : mapOfIdAndProjectToCreate.keySet())
        {
            Opportunity oppCreated = new Opportunity();
            oppCreated = mapOfIdAndProjectToCreate.get(OpportunityID);
            try
            {
                String projectId;
                String requestBody = createRequestBodyForProject(mapOfIdAndProjectToCreate.get(OpportunityID));
                HttpRequest req = CreateHttpRequest(ConstantCls.CreateProjectURL,requestBody,'POST');
                Http http = new Http();
                HTTPResponse resp = new HTTPResponse();
                if(!Test.IsRunningTest())
                {
                    resp = http.send(req);
                    System.debug('heap size after api call '+Limits.getHeapSize());
                }
                if(resp.getStatusCode() == 200)
                {
                    System.debug('heap size before deserialization'+Limits.getHeapSize());
// Till now we have 6 MB data in HTTPResponse resp variable, but when we go for deserializing by fetching its body, it gives Heap size limit error.
// In execution of below line, I am getting Heap size limit error.
                    **Map<String, Object> mapKeyVal = (Map<String, Object>)System.JSON.deserializeUntyped(resp.getBody());**

System.debug('heap size after deserialization '+Limits.getHeapSize());
                    Map<String, Object> data = (Map<String, Object>)mapKeyVal.get('data');
                    projectId = String.valueOf(data.get('projectId'));
                    oppCreated.projectId__c = projectId;
                    lstOppToUpdate.add(oppCreated);
                }
            }
            Catch(Exception ex)
            {
                System.debug('Error In Sync - CreateProjects method Updated - '+ ex.getMessage() + ex.getStackTraceString());              
            }
        }
    }
    UPDATE lstOppToUpdate;
}
public static HttpRequest CreateHttpRequest(String apiUrl, String requestBody, String method)
{
    Map<String,String> apiConfigs = GetAllConfigSettings();   
    HttpRequest req = new HttpRequest();
    req.setEndpoint(apiUrl);
    req.setMethod(method);  
    req.setTimeout(120000);
    req.setHeader('Content-Type', 'application/json');  
    req.setHeader('Authorization', apiConfigs.get('Access Token'));  
    if(String.isNotEmpty(requestBody))
    {
        req.setBody(requestBody);    
    }
    return req;
}
  • Remove From My Forums

 none

Ошибка десериализации помоги разабраться

  • Общие обсуждения

  • Здравствуйте форумчани,

    Пишу клиента для одной веб службу (*.wsdl) находящейся в интернете. Опыта в этих делах маловато у меня. Вот столкнулся с ошибкой десериализации. С начала я авторизовываюсь на сервисе, получаю тикет. Затем формирую посылку и отправляю. На что служба мне
    выдает вот такой ответ:

    <?xml version="1.0" encoding="utf-8" ?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <soapenv:Body>
      <SendProbeDataRequestResponse xmlns="http://probewebservices.traffic.com/schemas/v1_0/Probe" />
     </soapenv:Body>
    </soapenv:Envelope>
    

    На что дебагер ругается вот таким сообщением:
    Ошибка десериализации тела ответного сообщения для операции «sendProbeData». Ожидался элемент End «Body» из пространства
    имен «http://schemas.xmlsoap.org/soap/envelope/». Найден элемент «SendProbeDataRequestResponse» из пространства имен
    «http://probewebservices.traffic.com/schemas/v1_0/Probe». Строка 1, позиция 322.
    Как я понимаю при десериализации должно было вернутся вот такой ответ от службы согласно автосгенерированому коду по *.wsdl и .xsd

    <?xml version="1.0" encoding="utf-8" ?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <soapenv:Body>
     </soapenv:Body>
    </soapenv:Envelope>
    
    //------------------------------------------------------------------------------
    // <auto-generated>
    //   Этот код создан программой.
    //   Исполняемая версия:4.0.30319.235
    //
    //   Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
    //   повторной генерации кода.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    namespace Navteq_NoJava_ConsoleApplication.NavteqProbe {
      
      
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      [System.ServiceModel.ServiceContractAttribute(Namespace="http://probewebservices.traffic.com/services/v1_0/Probe", ConfigurationName="NavteqProbe.ProbePortType")]
      public interface ProbePortType {
        
        // CODEGEN: Контракт генерации сообщений с операцией sendProbeData не является ни RPC, ни упакованным документом.
        [System.ServiceModel.OperationContractAttribute(IsOneWay=false, Action="http://probewebservices.traffic.com/sendProbeData")]
        [System.ServiceModel.FaultContractAttribute(typeof(string), Action="http://probewebservices.traffic.com/sendProbeData", Name="WebServiceFault", Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebService")]
        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
        void sendProbeData(Navteq_NoJava_ConsoleApplication.NavteqProbe.sendProbeData request);
        
        // CODEGEN: Контракт генерации сообщений с операцией pingProbe не является ни RPC, ни упакованным документом.
        [System.ServiceModel.OperationContractAttribute(Action="http://probewebservices.traffic.com/pingProbe", ReplyAction="*")]
        [System.ServiceModel.FaultContractAttribute(typeof(string), Action="http://probewebservices.traffic.com/pingProbe", Name="WebServiceFault", Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebService")]
        [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
        Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeResponse pingProbe(Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeRequest request);
      }
      
      /// <remarks/>
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
      [System.SerializableAttribute()]
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.ComponentModel.DesignerCategoryAttribute("code")]
      [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebServiceClientContext")]
      public partial class WebServiceClientContext : object, System.ComponentModel.INotifyPropertyChanged {
        
        private string ticketField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=0)]
        public string ticket {
          get {
            return this.ticketField;
          }
          set {
            this.ticketField = value;
            this.RaisePropertyChanged("ticket");
          }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
          System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
          if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
          }
        }
      }
      
      /// <remarks/>
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
      [System.SerializableAttribute()]
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.ComponentModel.DesignerCategoryAttribute("code")]
      [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/Probe")]
      public partial class GeoLocation : object, System.ComponentModel.INotifyPropertyChanged {
        
        private float latitudeField;
        
        private float longitudeField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=0)]
        public float latitude {
          get {
            return this.latitudeField;
          }
          set {
            this.latitudeField = value;
            this.RaisePropertyChanged("latitude");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=1)]
        public float longitude {
          get {
            return this.longitudeField;
          }
          set {
            this.longitudeField = value;
            this.RaisePropertyChanged("longitude");
          }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
          System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
          if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
          }
        }
      }
      
      /// <remarks/>
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
      [System.SerializableAttribute()]
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.ComponentModel.DesignerCategoryAttribute("code")]
      [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/Probe")]
      public partial class GlobalPosition : object, System.ComponentModel.INotifyPropertyChanged {
        
        private GeoLocation geoLocField;
        
        private System.Nullable<int> headingField;
        
        private bool headingFieldSpecified;
        
        private System.Nullable<int> speedField;
        
        private bool speedFieldSpecified;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=0)]
        public GeoLocation geoLoc {
          get {
            return this.geoLocField;
          }
          set {
            this.geoLocField = value;
            this.RaisePropertyChanged("geoLoc");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=1)]
        public System.Nullable<int> heading {
          get {
            return this.headingField;
          }
          set {
            this.headingField = value;
            this.RaisePropertyChanged("heading");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool headingSpecified {
          get {
            return this.headingFieldSpecified;
          }
          set {
            this.headingFieldSpecified = value;
            this.RaisePropertyChanged("headingSpecified");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=2)]
        public System.Nullable<int> speed {
          get {
            return this.speedField;
          }
          set {
            this.speedField = value;
            this.RaisePropertyChanged("speed");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool speedSpecified {
          get {
            return this.speedFieldSpecified;
          }
          set {
            this.speedFieldSpecified = value;
            this.RaisePropertyChanged("speedSpecified");
          }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
          System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
          if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
          }
        }
      }
      
      /// <remarks/>
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
      [System.SerializableAttribute()]
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.ComponentModel.DesignerCategoryAttribute("code")]
      [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/Probe")]
      public partial class ProbeData : object, System.ComponentModel.INotifyPropertyChanged {
        
        private string deviceAddressField;
        
        private string deviceTypeField;
        
        private string deviceSubTypeField;
        
        private string sourceIdField;
        
        private GlobalPosition globalPositionField;
        
        private System.DateTime collectionTimeGMTField;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=0)]
        public string deviceAddress {
          get {
            return this.deviceAddressField;
          }
          set {
            this.deviceAddressField = value;
            this.RaisePropertyChanged("deviceAddress");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=1)]
        public string deviceType {
          get {
            return this.deviceTypeField;
          }
          set {
            this.deviceTypeField = value;
            this.RaisePropertyChanged("deviceType");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=2)]
        public string deviceSubType {
          get {
            return this.deviceSubTypeField;
          }
          set {
            this.deviceSubTypeField = value;
            this.RaisePropertyChanged("deviceSubType");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=3)]
        public string sourceId {
          get {
            return this.sourceIdField;
          }
          set {
            this.sourceIdField = value;
            this.RaisePropertyChanged("sourceId");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=4)]
        public GlobalPosition globalPosition {
          get {
            return this.globalPositionField;
          }
          set {
            this.globalPositionField = value;
            this.RaisePropertyChanged("globalPosition");
          }
        }
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute(Order=5)]
        public System.DateTime collectionTimeGMT {
          get {
            return this.collectionTimeGMTField;
          }
          set {
            this.collectionTimeGMTField = value;
            this.RaisePropertyChanged("collectionTimeGMT");
          }
        }
        
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        
        protected void RaisePropertyChanged(string propertyName) {
          System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
          if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
          }
        }
      }
      
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
      [System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
      public partial class sendProbeData {
        
        [System.ServiceModel.MessageHeaderAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebServiceClientContext")]
        public Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement;
        
        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/Probe", Order=0)]
        [System.Xml.Serialization.XmlArrayItemAttribute("probeData", IsNullable=false)]
        public ProbeData[] SendProbeDataRequest;
        
        public sendProbeData() {
        }
        
        public sendProbeData(Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement, ProbeData[] SendProbeDataRequest) {
          this.WebServiceClientContextElement = WebServiceClientContextElement;
          this.SendProbeDataRequest = SendProbeDataRequest;
        }
      }
      
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
      [System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
      public partial class pingProbeRequest {
        
        [System.ServiceModel.MessageHeaderAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebServiceClientContext")]
        public Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement;
        
        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebService", Order=0)]
        public string PlaceHolder;
        
        public pingProbeRequest() {
        }
        
        public pingProbeRequest(Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement, string PlaceHolder) {
          this.WebServiceClientContextElement = WebServiceClientContextElement;
          this.PlaceHolder = PlaceHolder;
        }
      }
      
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
      [System.ServiceModel.MessageContractAttribute(IsWrapped=false)]
      public partial class pingProbeResponse {
        
        [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://probewebservices.traffic.com/schemas/v1_0/WebService", Order=0)]
        public string Ping;
        
        public pingProbeResponse() {
        }
        
        public pingProbeResponse(string Ping) {
          this.Ping = Ping;
        }
      }
      
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      public interface ProbePortTypeChannel : Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType, System.ServiceModel.IClientChannel {
      }
      
      [System.Diagnostics.DebuggerStepThroughAttribute()]
      [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
      public partial class ProbePortTypeClient : System.ServiceModel.ClientBase<Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType>, Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType {
        
        public ProbePortTypeClient() {
        }
        
        public ProbePortTypeClient(string endpointConfigurationName) : 
            base(endpointConfigurationName) {
        }
        
        public ProbePortTypeClient(string endpointConfigurationName, string remoteAddress) : 
            base(endpointConfigurationName, remoteAddress) {
        }
        
        public ProbePortTypeClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
            base(endpointConfigurationName, remoteAddress) {
        }
        
        public ProbePortTypeClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
            base(binding, remoteAddress) {
        }
        
        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
        void Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType.sendProbeData(Navteq_NoJava_ConsoleApplication.NavteqProbe.sendProbeData request) {
          base.Channel.sendProbeData(request);
        }
        
        public void sendProbeData(Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement, ProbeData[] SendProbeDataRequest) {
          Navteq_NoJava_ConsoleApplication.NavteqProbe.sendProbeData inValue = new Navteq_NoJava_ConsoleApplication.NavteqProbe.sendProbeData();
          inValue.WebServiceClientContextElement = WebServiceClientContextElement;
          inValue.SendProbeDataRequest = SendProbeDataRequest;
          ((Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType)(this)).sendProbeData(inValue);
        }
        
        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
        Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeResponse Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType.pingProbe(Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeRequest request) {
          return base.Channel.pingProbe(request);
        }
        
        public string pingProbe(Navteq_NoJava_ConsoleApplication.NavteqProbe.WebServiceClientContext WebServiceClientContextElement, string PlaceHolder) {
          Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeRequest inValue = new Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeRequest();
          inValue.WebServiceClientContextElement = WebServiceClientContextElement;
          inValue.PlaceHolder = PlaceHolder;
          Navteq_NoJava_ConsoleApplication.NavteqProbe.pingProbeResponse retVal = ((Navteq_NoJava_ConsoleApplication.NavteqProbe.ProbePortType)(this)).pingProbe(inValue);
          return retVal.Ping;
        }
      }
    }
    
    
    • Изменен тип

      11 июля 2011 г. 9:57

Столкнулся с ошибкой при десериализации ответа от api.vk.com.

static void Main(string[] args)
{
    string url = "https://api.vk.com/method/messages.getChatUsers?chat_id=101&v=5.74&access_token=тут мой токен";

    HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
    if (req != null)
    {
        HttpWebResponse res = req.GetResponse() as HttpWebResponse;

        StreamReader stream = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("utf-8"));

        Console.WriteLine(stream.ReadToEnd());

        var item = JsonConvert.DeserializeObject<RootObject>(stream.ReadToEnd());

        Console.WriteLine(item.users[1]);
    }
    Console.ReadKey();
}
public class RootObject
{
    public List<int> users { get; set; }
}

введите сюда описание изображения

Сам ответ от API:
{"response":[218803928,317010917,179681066,173431607,356408021,421702993,295920106,121375474,261654407,322744642,307578021,384790605,223522189,141711244,286562711,204691290,343742090,474494798,237102289,478504542,177436279,196611542,66950243,189052497,331084770,421534614,225194958,224984110,204442992,48511162,436569015,253920936,460621648]}

  • Ошибка при десериализации json
  • Ошибка при декодировании заполнения oaep windows admin center
  • Ошибка при декодировании заполнения oaep delphi
  • Ошибка при ддос атаке
  • Ошибка при двусторонней печати