Я пытаюсь использовать службу ONVIF WSDL в приложении C # .net для связи с камерами IP-видеонаблюдения.
При разработке в .NET Visual Studio в Windows приложение работает нормально из моей командной строки.Попытка запустить тот же .exe на Mono (компилятор Mono JIT версии 5.16.0.220 (tarball Mon Nov 26 17:15:30 UTC 2018) на Debian. Я не могу заставить приложение работать.
Я считаю, что проблемасвязано с тем, что в Mono я получаю плохо отформатированный сбой SOAP, который приложение не может обработать. Я не знаю, вызван ли сбой SOAP IP-камерой, и Mono не может обработать его должным образом (в этом случае у меня возникает ошибкав обработке ошибок и исправлении основной причины, что бы это ни было, это исправило бы это) ИЛИ если сторона SOAP на самом деле в порядке, но Mono только испортил декодирование моих ответов.
Ниже приведена ошибка,похоже, что ответ SOAP содержит «env: faultcode», который не ожидается.
Unhandled Exception:
System.ServiceModel.CommunicationException: Received an invalid SOAP Fault message ---> System.Xml.XmlException: Unexpected node Element name env:faultcode
at System.ServiceModel.Channels.MessageFault.CreateFault12 (System.ServiceModel.Channels.Message message, System.Int32 maxBufferSize) [0x0012c] in <90242c243a054a8a8feb6f7b52756571>:0
at System.ServiceModel.Channels.MessageFault.CreateFault (System.ServiceModel.Channels.Message message, System.Int32 maxBufferSize) [0x0001c] in <90242c243a054a8a8feb6f7b52756571>:0
--- End of inner exception stack trace ---
at (wrapper managed-to-native) System.Object.__icall_wrapper_mono_remoting_wrapper(intptr,intptr)
at (wrapper remoting-invoke) OnvifMonitor.OnvifDeviceMgmt.Device.GetDeviceInformation(OnvifMonitor.OnvifDeviceMgmt.GetDeviceInformationRequest)
at OnvifMonitor.OnvifDeviceMgmt.DeviceClient.GetDeviceInformation (OnvifMonitor.OnvifDeviceMgmt.GetDeviceInformationRequest request) [0x00007] in <596fa5448c77457ba1f773bf27dbbf2a>:0
at OnvifMonitor.MonitoringThread.Connect (System.String ip, System.Int32 port) [0x0013e] in <596fa5448c77457ba1f773bf27dbbf2a>:0
at OnvifMonitor.Program.Main (System.String[] args) [0x0000c] in <596fa5448c77457ba1f773bf27dbbf2a>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.ServiceModel.CommunicationException: Received an invalid SOAP Fault message ---> System.Xml.XmlException: Unexpected node Element name env:faultcode
at System.ServiceModel.Channels.MessageFault.CreateFault12 (System.ServiceModel.Channels.Message message, System.Int32 maxBufferSize) [0x0012c] in <90242c243a054a8a8feb6f7b52756571>:0
at System.ServiceModel.Channels.MessageFault.CreateFault (System.ServiceModel.Channels.Message message, System.Int32 maxBufferSize) [0x0001c] in <90242c243a054a8a8feb6f7b52756571>:0
--- End of inner exception stack trace ---
at (wrapper managed-to-native) System.Object.__icall_wrapper_mono_remoting_wrapper(intptr,intptr)
at (wrapper remoting-invoke) OnvifMonitor.OnvifDeviceMgmt.Device.GetDeviceInformation(OnvifMonitor.OnvifDeviceMgmt.GetDeviceInformationRequest)
at OnvifMonitor.OnvifDeviceMgmt.DeviceClient.GetDeviceInformation (OnvifMonitor.OnvifDeviceMgmt.GetDeviceInformationRequest request) [0x00007] in <596fa5448c77457ba1f773bf27dbbf2a>:0
at OnvifMonitor.MonitoringThread.Connect (System.String ip, System.Int32 port) [0x0013e] in <596fa5448c77457ba1f773bf27dbbf2a>:0
at OnvifMonitor.Program.Main (System.String[] args) [0x0000c] in <596fa5448c77457ba1f773bf27dbbf2a>:0
Я не хочу публиковать полный код приложения, так как он довольно длинный и не уверен, какая часть важна.Я использовал Visual Studio для "Добавить ссылку на службу" https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl, которая является пространством имен OnvifDeviceMgmt в приведенном ниже сообщении.
WКогда мое приложение запускается, я делаю простой запрос к GetDeviceInformation, который должен вернуть некоторую общую информацию в приложение.Аутентификация передается, следуя примерам https://github.com/thephez/onvif-interface и используя некоторые рекомендации для этого на основе приведенного здесь кода.
Повторюсь, это работает FINE в Windows, но Mono, похоже, ведет себя по-другому.
Любые идеи о том, как я мог бы далее отладить ошибку Soap?Могу ли я как-то сказать ему игнорировать ошибки Soap и передавать их, или выяснить, в чем причина разницы?