Добавление 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: img0

Я читаю этот XML из wireshark, когда запускаю функцию через отладчик VS2017...

Угадайте: я пытаюсь добавить тип аутентификации UsernameToken в свой код, чтобы я мог выполнять операции, которые требуют этот тип аутентификации...

Вот изображение рабочего конверта XML/SOAP, которого я хотел бы достичь: img1

Я пытался добавить эти строки в мой код:

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?

0 ответов

Другие вопросы по тегам