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

Я пишу адаптер службы для использования веб-служб, размещенных другим поставщиком (Pega). Я не могу сменить эту услугу. При вызове метода выдает ошибку: «Ошибка в десерии ...
  1. На главную

  2. How

  3. Ошибка десериализации тела сообщения запроса на операцию

Ошибка десериализации тела сообщения запроса на операцию

  • 2023
  • Редактор:
    Christopher Sullivan |
    Написать мне

Я пишу адаптер службы для использования веб-служб, размещенных другим поставщиком (Pega). Я не могу сменить эту услугу. Когда я вызываю метод, я получаю сообщение об ошибке:

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

Я пробовал увеличить maxStringContentLength и все такое. Ничего не получилось. Изучая ответ XML, я вижу пустые значения для нескольких переменных типа long и int, я считаю, что это причина.

Есть ли какое-нибудь исправление для этого?

  • 1 Выполняется десериализация. Извините за автокоррекцию.
  • Эта ссылка может быть вам полезна marcipsen.wordpress.com/2009/02/25/…
  • Спасибо, Картик, но я уже пытался изменить настройки в app.config. Как я уже упоминал, я считаю, что причиной могут быть пустые значения для нескольких переменных типа long и int в ответном XML. Требуется исправление для этого со стороны клиента.
  • Есть ли внутреннее исключение с более подробной информацией?
  • Единственное, что имеет смысл: в System.Number.ParseInt64 (значение String, параметры NumberStyles, NumberFormatInfo numfmt) в System.Xml.XmlConvert.ToInt64 (String s)

Это было решено после удаления пустых тегов со стороны службы. На стороне клиента .Net решение не найдено.

  • У меня конец службы настроен на отправку 0 вместо нулевого элемента.
  • Спасибо. Я исправил свою проблему двумя вещами: 1) изменил тип возвращаемого значения операции с простого строкового типа на пользовательский тип класса, украшенный DataContractAttribute. 2) Я удалил HttpWatch 7.0.22, который мешает вызову jQuery. Именно HttpWatch заблокировал отправку аргумента операции.
  • @PAVITRA — У меня та же проблема, и я не мог понять, как решить, следуя вашим инструкциям: как вы на самом деле это сделали? Какие пустые теги? Из какого файла?
  • В ответ у меня были пустые значения для нескольких полей типа long и int, не допускающих значения NULL. Обычно этого не должно происходить. При попытке десериализации этого ответа возникла ошибка. Не удалось найти исправления от .NET для этого. Поэтому моим последним вариантом было изменить стороннюю службу. Я изменил его, чтобы отправлять 0 вместо пустых тегов для длинных полей int.

Я решил эту проблему, изменив формат одного из параметров запроса. Дата была передана в виде текста, и службе не удалось проанализировать предоставленный формат даты.

Не уверен, почему служба ожидала дату в виде строки, но в то время это выходило за рамки.

  • 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

Im hosting a SOAP ServiceHost, and the client is sending a specific message.

The service is responding a 500 Internal Server Error as it is not capable of decoding the SOAP message. The fault reason is:

Reason: «Error deserializing body of request message for operation GetStreamUri»

InnerException: «Namespace prefix ‘onv’ is not defined»

To check what was happening we compared the messages arriving with those parsed by the servicehost.

We captured the message with Wireshark:

<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:onv="http://www.onvif.org/ver10/schema" 
xmlns:media="http://www.onvif.org/ver10/media/wsdl">
    <SOAP-ENV:Header>
        <!-- security stuff -->
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <media:GetStreamUri>
            <media:StreamSetup xsi:type="onv:StreamSetup">
                <onv:Stream>RTP-Unicast</onv:Stream>
                <onv:Transport xsi:type="onv:Transport">
                    <onv:Protocol>UDP</onv:Protocol>
                </onv:Transport>
            </media:StreamSetup>
            <media:ProfileToken>cs_videoProfileTK_000</media:ProfileToken>
        </media:GetStreamUri>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

And the we captured what the servicehost received with a Message Inspector:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
    <s:Header>
        <!-- security stuff -->
    </s:Header>
    <s:Body>
        <media:GetStreamUri xmlns:media="http://www.onvif.org/ver10/media/wsdl">
            <media:StreamSetup xsi:type="onv:StreamSetup" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <onv:Stream xmlns:onv="http://www.onvif.org/ver10/schema">RTP-Unicast</onv:Stream>
                <onv:Transport xsi:type="onv:Transport" xmlns:onv="http://www.onvif.org/ver10/schema">
                    <onv:Protocol>UDP</onv:Protocol>
                </onv:Transport>
            </media:StreamSetup>
            <media:ProfileToken>cs_videoProfileTK_000</media:ProfileToken>
        </media:GetStreamUri>
    </s:Body>
</s:Envelope>

As you can see, the namespace parser detects the ‘onv’ prefix, and assigns it to

<onv:Stream xmlns:onv="http://www.onvif.org/ver10/schema">RTP-Unicast</onv:Stream>

but the issue is that ‘onv’ namespace is defined just after being used in the xsi:type attribute

<media:StreamSetup xsi:type="onv:StreamSetup" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

It seems that the XMLSerializer is not doing a good job with namespaces being used in attributes. Is there any solution or workaround using message formatters or inspectors?

Edit
Generated code from WSDL.

// StreamSetup class
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.onvif.org/ver10/schema")]
public partial class StreamSetup : object, System.ComponentModel.INotifyPropertyChanged {

    private StreamType streamField;

    //ommited

    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public StreamType Stream {
        get {
            return this.streamField;
        }
        set {
            this.streamField = value;
            this.RaisePropertyChanged("Stream");
        }
    }

    // ommited
}

// StreamType class
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.onvif.org/ver10/schema")]
public enum StreamType {

    [System.Xml.Serialization.XmlEnumAttribute("RTP-Unicast")]
    RTPUnicast,

    // ommited
}

// Get Stream URI Method/Operation
[System.ServiceModel.OperationContractAttribute(Action="http://www.onvif.org/ver10/media/wsdl/GetStreamUri", ReplyAction="*")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(ConfigurationEntity))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(DeviceEntity))]
[return: System.ServiceModel.MessageParameterAttribute(Name="MediaUri")]
ONVIF.MediaUri GetStreamUri(ONVIF.StreamSetup StreamSetup, string ProfileToken);

Im hosting a SOAP ServiceHost, and the client is sending a specific message.

The service is responding a 500 Internal Server Error as it is not capable of decoding the SOAP message. The fault reason is:

Reason: «Error deserializing body of request message for operation GetStreamUri»

InnerException: «Namespace prefix ‘onv’ is not defined»

To check what was happening we compared the messages arriving with those parsed by the servicehost.

We captured the message with Wireshark:

<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:onv="http://www.onvif.org/ver10/schema" 
xmlns:media="http://www.onvif.org/ver10/media/wsdl">
    <SOAP-ENV:Header>
        <!-- security stuff -->
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <media:GetStreamUri>
            <media:StreamSetup xsi:type="onv:StreamSetup">
                <onv:Stream>RTP-Unicast</onv:Stream>
                <onv:Transport xsi:type="onv:Transport">
                    <onv:Protocol>UDP</onv:Protocol>
                </onv:Transport>
            </media:StreamSetup>
            <media:ProfileToken>cs_videoProfileTK_000</media:ProfileToken>
        </media:GetStreamUri>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

And the we captured what the servicehost received with a Message Inspector:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
    <s:Header>
        <!-- security stuff -->
    </s:Header>
    <s:Body>
        <media:GetStreamUri xmlns:media="http://www.onvif.org/ver10/media/wsdl">
            <media:StreamSetup xsi:type="onv:StreamSetup" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <onv:Stream xmlns:onv="http://www.onvif.org/ver10/schema">RTP-Unicast</onv:Stream>
                <onv:Transport xsi:type="onv:Transport" xmlns:onv="http://www.onvif.org/ver10/schema">
                    <onv:Protocol>UDP</onv:Protocol>
                </onv:Transport>
            </media:StreamSetup>
            <media:ProfileToken>cs_videoProfileTK_000</media:ProfileToken>
        </media:GetStreamUri>
    </s:Body>
</s:Envelope>

As you can see, the namespace parser detects the ‘onv’ prefix, and assigns it to

<onv:Stream xmlns:onv="http://www.onvif.org/ver10/schema">RTP-Unicast</onv:Stream>

but the issue is that ‘onv’ namespace is defined just after being used in the xsi:type attribute

<media:StreamSetup xsi:type="onv:StreamSetup" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

It seems that the XMLSerializer is not doing a good job with namespaces being used in attributes. Is there any solution or workaround using message formatters or inspectors?

Edit
Generated code from WSDL.

// StreamSetup class
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.onvif.org/ver10/schema")]
public partial class StreamSetup : object, System.ComponentModel.INotifyPropertyChanged {

    private StreamType streamField;

    //ommited

    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public StreamType Stream {
        get {
            return this.streamField;
        }
        set {
            this.streamField = value;
            this.RaisePropertyChanged("Stream");
        }
    }

    // ommited
}

// StreamType class
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34234")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.onvif.org/ver10/schema")]
public enum StreamType {

    [System.Xml.Serialization.XmlEnumAttribute("RTP-Unicast")]
    RTPUnicast,

    // ommited
}

// Get Stream URI Method/Operation
[System.ServiceModel.OperationContractAttribute(Action="http://www.onvif.org/ver10/media/wsdl/GetStreamUri", ReplyAction="*")]
[System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(ConfigurationEntity))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(DeviceEntity))]
[return: System.ServiceModel.MessageParameterAttribute(Name="MediaUri")]
ONVIF.MediaUri GetStreamUri(ONVIF.StreamSetup StreamSetup, string ProfileToken);

Аватара пользователя

kROOT

Специалист
Сообщения: 13162
Зарегистрирован: 02 сен 2013, 14:25
Откуда: youcam.pro
Контактная информация:

Re: Нет изображения (сигнала) с IP камеры

а камера случайно не Н265? линк давай на лот, где купил.



vadyusha

Новичок
Сообщения: 40
Зарегистрирован: 09 янв 2017, 13:28

Re: Нет изображения (сигнала) с IP камеры

Сообщение

vadyusha » 17 фев 2017, 12:44

Что это за штука? Ни звонит, ни сопротивления не измеряется.
Изображение



Sergiodemaster

Специалист
Сообщения: 3407
Зарегистрирован: 16 окт 2012, 09:24
Откуда: Рязань

Re: Нет изображения (сигнала) с IP камеры

Сообщение

Sergiodemaster » 17 фев 2017, 14:08

Поясните, пожалуйста, что вы там хотите найти, тыкая в плату мультиметром?
У вас либо прошивка слетела, либо процессор помер.
Если у вас есть острое желание воскресить модуль, и есть практика использования заклинаний вуду — изучайте ветку viewforum.php?f=24″ onclick=»window.open(this.href);return false;
Сходные ситуации там уже обсуждались.


vadyusha

Новичок
Сообщения: 40
Зарегистрирован: 09 янв 2017, 13:28

Re: Нет изображения (сигнала) с IP камеры

Сообщение

vadyusha » 17 фев 2017, 14:39

дохлый элемент, разрыв контакта.
Схожего не находил


Аватара пользователя

kROOT

Специалист
Сообщения: 13162
Зарегистрирован: 02 сен 2013, 14:25
Откуда: youcam.pro
Контактная информация:

Re: Нет изображения (сигнала) с IP камеры

Сообщение

kROOT » 17 фев 2017, 16:25

так камера работала раньше или нет?
если нет, то надо открывать диспут и возвращать камеру продавцу и больше такие камеры не покупать. малоизвестный производитель, плохая явно не уличная матрица с низкой чувствительностью и самое главное, чуть дешевле, чем проверенный ХМ на соневской матрице.


vadyusha

Новичок
Сообщения: 40
Зарегистрирован: 09 янв 2017, 13:28

Re: Нет изображения (сигнала) с IP камеры

Сообщение

vadyusha » 17 фев 2017, 16:28

Ни знаю почему, но заработала. То ли из-за остатка флюса, то ли из-за того, что полез в раздел Web страница и поставил QuickTime Player и еще что-то там щелка.



vadyusha

Новичок
Сообщения: 40
Зарегистрирован: 09 янв 2017, 13:28

Re: Нет изображения (сигнала) с IP камеры

Сообщение

vadyusha » 17 фев 2017, 16:44

Но вот это так и не исправилось. ONVIF Device Manager во вкладке Events в столбце Topic непрерывно пишется строка tns1:RuleEngine Там же в Events в Filters написано: Ошибка десериализации тела ответного сообщения для операции «GetEventProperties».
Изображение



Вернуться в «Общие вопросы по видеонаблюдению»


Перейти

  • Правила форума
  • Если не зайти на форум
  • Видеонаблюдение
  • ↳   Общие вопросы по видеонаблюдению
  • ↳   IP видеонаблюдение
  • ↳   Аналоговые системы видеонаблюдения
  • ↳   HD видеонаблюдение по коаксиальному кабелю (HD-SDI, AHD, HD-CVI и т.п.)
  • ↳   FAQ. Основы видеонаблюдения.
  • Оборудование из Китая (ebay, aliexpress, taobao, 409shop и т.п.)
  • ↳   Помогите выбрать
  • ↳   Оборудование из Китая — общие вопросы
  • ↳   Восстановление и настройка
  • ↳   Обзоры оборудования
  • ↳   Отправка, доставка, гарантия, возврат
  • Охранные и пожарные сигнализации, контроль доступа и прочие системы безопасности
  • ↳   Охранные и пожарные сигнализации, пожаротушение и т.п.
  • ↳   Контроль доступа, домофоны, учет рабочего времени.
  • ↳   Турникеты, шлагбаумы, автоматические ворота.
  • ↳   Монтаж
  • ↳   Инструкции и нормативные документы.
  • Все остальное
  • ↳   Работа
  • ↳   Предложения и запросы
  • ↳   Курилка

Модератор: immortal

Аватара пользователя

sergejey

Site Admin
Сообщения: 4282
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а):
75 раз
Поблагодарили:
1549 раз
Контактная информация:

[Модуль] ONVIF (onvif)

Новый модуль в маркете: ONVIF

Поддержка работы с IP-камерами по протоколу ONVIF

Возможности:
* Автоматический поиск камер в локальной сети (Discovery)
* Чтение параметров найденных камер (в том числе доступных медиа-потоков с примером кода для использования в системе)
* Подписка и опрос событий с камеры (очень экспериментально)

За это сообщение автора sergejey поблагодарили (всего 10):
Eraser (Чт мар 02, 2017 1:59 pm) • Matviiv (Чт мар 02, 2017 2:39 pm) • xor (Чт мар 02, 2017 2:49 pm) • Denis_k (Чт мар 02, 2017 2:55 pm) • C_3AXAPOB (Чт мар 02, 2017 4:00 pm) • Vit (Чт мар 02, 2017 8:44 pm) • zelevova (Пт сен 22, 2017 11:12 pm) • woow (Вт окт 23, 2018 9:14 pm) • Logrus (Чт сен 26, 2019 6:39 pm) • VikAnik (Пт мар 12, 2021 3:03 pm)


Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки — за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect — информация, сотрудничество, услуги

newz20

Сообщения: 170
Зарегистрирован: Пт апр 06, 2018 9:40 am
Благодарил (а):
93 раза
Поблагодарили:
87 раз

Re: Модуль ONVIF

Сообщение

newz20 » Чт мар 02, 2017 3:20 pm

Дополнение:
1. Поток не найден в модуле, но он есть и найден другими программами. Подставить данные потока вручную, описано тут, тут и тут.
2. На винде не всегда убиваются процессы ffmpeg, вариант решения тут
3. В модуле можно добавлять потоки вручную, смотреть тут.
4. Вариант изменения размера изображения, потока тут и еще тут.
5. Отправка в телегу, рабочий код есть и в ветке телеги, тыц.
6. Бывает не верный кодек ставится, от сюда и 2 страницы ниже.
7. Поток модулем выводится не онлайн а кадрами с интервалом. На некоторых камерах можно попробовать обойти. Ресурсозатратно.
8. Обработано до 21 страницы,техническая запись для модераторов.

Аватара пользователя

sergejey

Site Admin
Сообщения: 4282
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а):
75 раз
Поблагодарили:
1549 раз
Контактная информация:

Re: Модуль ONVIF

Сообщение

sergejey » Чт мар 02, 2017 3:29 pm

dmw писал(а):А из другой подсети можно подключить?
вот например у меня дома 192.168.1.х, в загородном доме сеть подключена через OpenVPN и все устройства видны на 192.168.5.x
на камеру захожу из домашней сета на 192.168.5.32
Descovery камеру не находит :(

Боюсь, что пока нет. Но я наверное сделаю ещё ручной режим добавления камер с известным IP.

За это сообщение автора sergejey поблагодарил:
dmw (Чт мар 02, 2017 3:48 pm)


Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки — за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect — информация, сотрудничество, услуги

Jager

Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а):
26 раз
Поблагодарили:
182 раза

Re: Модуль ONVIF

Сообщение

Jager » Чт мар 02, 2017 4:12 pm

sergejey писал(а):Но я наверное сделаю ещё ручной режим добавления камер с известным IP.

Нужное дело. Сейчас решил протестировать модуль, не нашлось ни одной камеры. Onvif Device Manager видит 3 штуки.
Вечером попробую в другой сети и с другими камерами.

ILGAS

Сообщения: 366
Зарегистрирован: Пт июл 26, 2013 4:11 pm
Благодарил (а):
71 раз
Поблагодарили:
18 раз

Re: Модуль ONVIF

Сообщение

ILGAS » Чт мар 02, 2017 7:04 pm

У меня нашел камеру от домофона, но картинки нет (( похоже не подцыпляет пароль

Отправлено с моего SM-G7508Q

Jager

Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а):
26 раз
Поблагодарили:
182 раза

Re: Модуль ONVIF

Сообщение

Jager » Чт мар 02, 2017 8:02 pm

8 камер c onvif, поиск завершается такой ошибкой

Fatal error: Uncaught exception ‘Exception’ with message ‘GetStreamUri: Communication error’ in C:_majordomohtdocsmodulesonvifclass.ponvif.php:382 Stack trace: #0 C:_majordomohtdocsmodulesonvifonvif.class.php(205): Ponvif->media_GetStreamUri(NULL) #1 C:_majordomohtdocsmodulesonvifonvif.class.php(155): onvif->updateDevice(‘1’, Object(Ponvif)) #2 C:_majordomohtdocsmodulesonvifonvif.class.php(308): onvif->discovery() #3 C:_majordomohtdocsmodulesonvifonvif.class.php(104): onvif->admin(Array) #4 C:_majordomohtdocslibjTemplate.class.php(711) : eval()’d code(8): onvif->run() #5 C:_majordomohtdocslibjTemplate.class.php(711): eval() #6 C:_majordomohtdocslibjTemplate.class.php(195): jTemplate->parseModules(‘<!DOCTYPE html>…’, Array, ‘./templates/’) #7 C:_majordomohtdocslibjTemplate.class.php(109): jTemplate->parse(‘<!—#n @version…’, Array, ‘./templates/’) #8 C:_majordomohtdocslibparser.class.php(93): jTemplate->__construct(‘./templates/pan…’, Array, Object(panel)) #9 C:_majordom in C:_majordomohtdocsmodulesonvifclass.ponvif.php on line 382

в результате одна камера находится, но линка на поток нет.

C_3AXAPOB

Сообщения: 510
Зарегистрирован: Ср июн 08, 2016 4:17 pm
Благодарил (а):
124 раза
Поблагодарили:
100 раз

Re: Модуль ONVIF

Сообщение

C_3AXAPOB » Чт мар 02, 2017 8:58 pm

Находит камеру но поток не показывает. Камера sricam p009.
Модуль thumb работает с ней только если в модуле отредактировать вызов ffmpeg убрав из него «-rtsp_transport tcp»

Аватара пользователя

sergejey

Site Admin
Сообщения: 4282
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а):
75 раз
Поблагодарили:
1549 раз
Контактная информация:

Re: Модуль ONVIF

Сообщение

sergejey » Пт мар 03, 2017 9:29 am

Ну считаем, что мы в начале пути :) За то я знаю, кого просить тестировать модуль ))


Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки — за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect — информация, сотрудничество, услуги

Аватара пользователя

nick7zmail

Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а):
121 раз
Поблагодарили:
2008 раз

Re: Модуль ONVIF

Сообщение

nick7zmail » Пт мар 03, 2017 5:08 pm

Готов помочь с тестами
тоже ошибочки…

Код: Выделить всё

Fatal error: Uncaught exception 'Exception' with message 'GetStreamUri: Communication error' in C:_majordomohtdocsmodulesonvifclass.ponvif.php:382 Stack trace: #0 C:_majordomohtdocsmodulesonvifonvif.class.php(205): Ponvif->media_GetStreamUri(NULL) #1 C:_majordomohtdocsmodulesonvifonvif.class.php(155): onvif->updateDevice(1, Object(Ponvif)) #2 C:_majordomohtdocsmodulesonvifonvif.class.php(308): onvif->discovery() #3 C:_majordomohtdocsmodulesonvifonvif.class.php(104): onvif->admin(Array) #4 C:_majordomohtdocslibjTemplate.class.php(711) : eval()'d code(8): onvif->run() #5 C:_majordomohtdocslibjTemplate.class.php(711): eval() #6 C:_majordomohtdocslibjTemplate.class.php(195): jTemplate->parseModules('<!DOCTYPE html>...', Array, './templates/') #7 C:_majordomohtdocslibjTemplate.class.php(109): jTemplate->parse('<!--#n @version...', Array, './templates/') #8 C:_majordomohtdocslibparser.class.php(93): jTemplate->__construct('./templates/pan...', Array, Object(panel)) #9 C:_majordomo in C:_majordomohtdocsmodulesonvifclass.ponvif.php on line 382    

Ждем обнов…
Я правильно понял, что модуль позволит в том числе записывать видео по движению?

UPD…а камера то добавилась Оо…только вот поток не считался

Вложения
1.jpg
1.jpg (166.42 КБ) 18701 просмотр

eygen

Сообщения: 392
Зарегистрирован: Чт сен 25, 2014 5:37 pm
Откуда: Екатеринбург
Благодарил (а):
25 раз
Поблагодарили:
52 раза

Re: Модуль ONVIF

Сообщение

eygen » Пт мар 03, 2017 6:34 pm

nick7zmail писал(а):Готов помочь с тестами
тоже ошибочки…

Код: Выделить всё

Fatal error: Uncaught exception 'Exception' with message 'GetStreamUri: Communication error' in C:_majordomohtdocsmodulesonvifclass.ponvif.php:382 Stack trace: #0 C:_majordomohtdocsmodulesonvifonvif.class.php(205): Ponvif->media_GetStreamUri(NULL) #1 C:_majordomohtdocsmodulesonvifonvif.class.php(155): onvif->updateDevice(1, Object(Ponvif)) #2 C:_majordomohtdocsmodulesonvifonvif.class.php(308): onvif->discovery() #3 C:_majordomohtdocsmodulesonvifonvif.class.php(104): onvif->admin(Array) #4 C:_majordomohtdocslibjTemplate.class.php(711) : eval()'d code(8): onvif->run() #5 C:_majordomohtdocslibjTemplate.class.php(711): eval() #6 C:_majordomohtdocslibjTemplate.class.php(195): jTemplate->parseModules('<!DOCTYPE html>...', Array, './templates/') #7 C:_majordomohtdocslibjTemplate.class.php(109): jTemplate->parse('<!--#n @version...', Array, './templates/') #8 C:_majordomohtdocslibparser.class.php(93): jTemplate->__construct('./templates/pan...', Array, Object(panel)) #9 C:_majordomo in C:_majordomohtdocsmodulesonvifclass.ponvif.php on line 382     

Ждем обнов…
Я правильно понял, что модуль позволит в том числе записывать видео по движению?

UPD…а камера то добавилась Оо…только вот поток не считался

Вот и у меня таже ошибка.
Хочется все же настойку видеокамеру с другого vlan подключать, у меня видеонаблюдение вытащено в отдельный сегмент сети…

Понравилась статья? Поделить с друзьями:
  • Ошибка двигатель неисправен форд s max
  • Ошибка дискорда не установлен маршрут
  • Ошибка добавления символов bad value
  • Ошибка двигателя пассат сс
  • Ошибка деления на ноль java