私の仕事は、建物内の ONVIF カメラとの通信を確立し、最終的には会社の Dootic ソリューションをアップグレードして、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]);
app.config ファイルに customBinding のこの xml 仕様があります。
<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 - Bad request」エラーが発生します。これは、カメラの認証を処理する必要があるためです。
問題は、WS-Security (ONVIF で使用されているようです) について私が見つけたものはすべて、本当に混乱しており、さまざまな解決策があり、実際には何も機能していないことです。たとえば、この投稿は非常に単純に聞こえますが、UserNameSecurityToken を作成しようとしましたが、まだ 400 の不正な要求エラーが発生します。それがトークンシステムを間違って書いたからなのか、カメラが私がやろうとしていることをサポートしていないからなのかはわかりません。
私はすでに WSHttpBinding を試してユーザー名モードにしましたが、WSHttpBinding を使用すると、作成できた基本的な情報ディスカバリーが壊れます (MustUnderstand エラーで)...
私への指針はありますか?簡単な WS-Security/.NET、C#/ONVIF チュートリアル、すべて受け入れられます。