Добавление usernameToken аутентификации на ONVIF deviceClient
КОНТЕКСТ:
В настоящее время я пытаюсь закодировать приложение C# для получения информации, такой как канал камеры, dateTime, потоковый URL, профили и многое другое, с IP-камеры, используя стандарт ONVIF...
Мне удалось получить системное время камеры, используя этот бит кода:
public bool Initialise(string cameraAddress, string userName, string password)
{
bool result = false;
try
{
var messageElement = new TextMessageEncodingBindingElement()
{
MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.WSAddressing10)
};
HttpTransportBindingElement httpBinding = new HttpTransportBindingElement()
{
AuthenticationScheme = AuthenticationSchemes.Digest
};
CustomBinding bind = new CustomBinding(messageElement, httpBinding);
System.Net.ServicePointManager.Expect100Continue = false;
DeviceClient deviceClient = new DeviceClient(bind, new EndpointAddress($"http://{cameraAddress}/onvif/device_service"));
var temps = deviceClient.GetSystemDateAndTime();
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
}
return result;
}
deviceClient.GetSystemDateAndTime()
функция отправляет этот конверт XML/SOAP через http:
Я читаю этот XML из wireshark, когда запускаю функцию через отладчик VS2017...
Угадайте: я пытаюсь добавить тип аутентификации UsernameToken в свой код, чтобы я мог выполнять операции, которые требуют этот тип аутентификации...
Вот изображение рабочего конверта XML/SOAP, которого я хотел бы достичь:
Я пытался добавить эти строки в мой код:
deviceClient = new DeviceClient(bind, new EndpointAddress($"http://{cameraAddress}/onvif/device_service"));
deviceClient.ClientCredentials.HttpDigest.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
deviceClient.ClientCredentials.HttpDigest.ClientCredential.UserName = userName;
deviceClient.ClientCredentials.HttpDigest.ClientCredential.Password = password;
, но он даже не добавляет бит пользователя / пароля в XML, который я отправляю....
ВОПРОС: Как я могу добавить этот usernameToken в заголовок отправляемого мной конверта XML/SOAP?