Je développe un pilote ONVIF utilisant .NET 4 (Windows Forms, pas WCF). J'ai commencé à importer des fichiers WSDL en tant que service dans Visual Studio. Je suis en mesure d'envoyer la commande à un dispositif de cette manière:ONVIF service wsdl: impossible d'authentifier
HttpTransportBindingElement httpTransportBindingElement = new HttpTransportBindingElement();
[...]
TextMessageEncodingBindingElement messegeElement = new TextMessageEncodingBindingElement();
[...]
CustomBinding binding = new CustomBinding(messegeElement, httpTransportBindingElement);
[...]
EndpointAddress serviceAddress = new EndpointAddress(url);
DeviceClient deviceClient = new DeviceClient(binding, serviceAddress);
Device channel = deviceClient.ChannelFactory.CreateChannel();
DeviceServiceCapabilities dsc = channel.GetServiceCapabilities();
Mais je ne suis pas en mesure de gérer l'authentification HTTP Digest. J'ai passé des jours à chercher des exemples et des solutions Google, mais le seul moyen semble être d'écrire du code XML à la main. Il n'y a pas de solution propre comme:
deviceClient.ChannelFactory.Credentials.HttpDigest.ClientCredential.UserName = USERNAME;
deviceClient.ChannelFactory.Credentials.HttpDigest.ClientCredential.Password = digestPassword;
(cela ne fonctionne pas)?
Il y a beaucoup de choses qui manquent dans votre exemple, et des choses très importantes ... Comment obtenez-vous les variables utilisées pour formater votre en-tête digest? (par exemple nonce? avez-vous besoin de faire une demande pour cela?) – cube45
Oui, vous avez raison: vous devez envoyer une requête sans authentification, le serveur répondra avec un message d'erreur contenant nonce, royaume et ainsi de suite. – ElmoDev001
Est-ce que vous créez votre propre HttpClient au début de BeforeSendRequest? Pourriez-vous éditer votre réponse et fournir un exemple plus complet? – cube45