Моя задача состоит в том, чтобы попытаться установить связь с камерой ONVIF в здании, чтобы, в конечном итоге, обновить domotic-решение компании для автоматического распознавания камер ONVIF и возможности их настройки и использования их услуг.
Я уже могу собрать некоторую основную информацию, такую как модель, MAC-адрес и версия прошивки следующим образом:
EndpointAddress endPointAddress = new EndpointAddress("<mycameraurl:<mycameraport>/onvif/device_service");
CustomBinding bind = new CustomBinding("DeviceBinding");
DeviceClient temp = new DeviceClient(bind, endPointAddress);
String[] arrayString = new String[4];
String res = temp.GetDeviceInformation(out arrayString[0], out arrayString[1], out arrayString[2], out arrayString[3]);
MessageBox.Show("Model " + arrayString[0] + ", FirmwareVersion " + arrayString[1] + ", SerialNumber " + arrayString[2] + ", HardwareId " + arrayString[3]);
У меня есть эта спецификация xml для customBinding в моем файле app.config:
<customBinding>
<binding name="DeviceBinding">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
messageVersion="Soap12" writeEncoding="utf-8">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
<httpTransport manualAddressing="false" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="false" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true" />
</binding>
</customBinding>
Моя проблема в том, что я не могу углубиться в то, что я могу попросить камеру.Я получаю ошибки «400 - Плохой запрос» для всего, что я пытаюсь, и в соответствии с тем, что я прочитал, это потому, что мне нужно обработать аутентификацию для камеры.
Проблема в том, что все, что я нахожу в WS-Security(который, кажется, используется ONVIF) очень, очень запутан, с множеством разных решений, и ничего для меня не работает.Например, этот пост здесь звучит очень просто, но я попытался создать UserNameSecurityToken, и я все еще получаю 400 ошибок неверного запроса.Так как я не знаю, потому ли это, что я написал свою систему токенов неправильно, если это потому, что камера не поддерживает то, что я пытаюсь сделать.
Я уже попробовал WSHttpBinding и поместил его в Имя пользователярежим, но с помощью WSHttpBinding нарушить базовое раскрытие информации, которое я смог создать (с ошибкой MustUnderstand) ...
Есть ли у меня какие-нибудь указатели?Простые учебники по WS-Security / .NET, C # / ONVIF, все будет принято.