2011-12-09 7 views
3

私は完全にONVIF認証に固執しています。私はすべてを試したり、少なくともほぼすべてを試したと思うし、インターネット上で十分な情報が見つからないと思う。私は(私は多くのことを試してみましたので、それらの1つ)の認証を行うには、私のコードは、svcutilを使用してスタブクライアントを作成しました:軸camara P1344でのOnvif認証C#

{"The remote server returned an unexpected response: (400) Bad Request."} 
:この次にエラーが発生した後

string uri = "http://140.0.22.39/onvif/services"; 

EndpointAddress serviceAddressPrueba = new EndpointAddress(uri); 
HttpTransportBindingElement httpBinding = new HttpTransportBindingElement(); 
httpBinding.AuthenticationScheme = AuthenticationSchemes.Digest; 
var messegeElement = new TextMessageEncodingBindingElement(); 
messegeElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None); 
CustomBinding bindprueba = new CustomBinding(messegeElement, httpBinding); 
DeviceClient clientprueba = new DeviceClient(bindprueba, serviceAddressPrueba); 
string passwordDigestBase64; 
//HERE I PUT THE CODE TO ENCRYPT THE PASSWORD. 
PasswordDigestBehavior behavior1 = new PasswordDigestBehavior("root",passwordDigestBase64); 
clientprueba.Endpoint.Behaviors.Add(behavior1); 
string d1; 
string d2; 
string d3; 
string d4; 

clientprueba.GetDeviceInformation(out d1, out d2, out d3, out d4); 

これを解決するための情報を私に教えていただけたら非常に感謝しています。

+0

を確認してください。http://stackoverflow.com/questions/18149866/unable-to-connect-to-onvif-enabled-camera-using-c-sharp/18623888#18623888 – mhcuervo

答えて

0

物事のカップルは、これを引き起こす可能性:

  1. あなたは、このようにONVIFのユーザーをロックする、ウェブブラウザを介してrootのパスワードを設定しました。カメラにログインしてONVIFユーザーを追加してください(特別なページがあります)

  2. パスワードダイジェストにはパスワードだけが含まれています。ランダムワンタイム、作成時刻、パスワードの連結が必要です。

  3. ローカル時計がカメラの時計と同期していません。 getSystemDateAndTimeを呼び出してリモートクロックを読み取り、あなたとの時間差を記録します。

これらは私を鈍化4つの主要なもののうち3であった(第四1は、WSDLをインポートしましたが、あなたはすでにそれを得たように見える)

0

この方法試してみてください:

ServicePointManager.Expect100Continue = false; 
var endPointAddress = new EndpointAddress("http://" + cameraAddress + "/onvif/device_service"); 
var httpTransportBinding = new HttpTransportBindingElement { AuthenticationScheme = AuthenticationSchemes.Digest }; 
var textMessageEncodingBinding = new TextMessageEncodingBindingElement { MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None) }; 
var customBinding = new CustomBinding(textMessageEncodingBinding, httpTransportBinding); 
var passwordDigestBehavior = new PasswordDigestBehavior(adminName, adminPassword); 
var deviceClient = new DeviceClient(customBinding, endPointAddress); 
deviceClient.Endpoint.Behaviors.Add(passwordDigestBehavior); 

ServicePointManager.Expect100Continuefalseに設定することが重要であることに注意してください。