这个问题已经在几个主题中讨论过了,但是我找不到答案。带有SOAP级别认证和HTTP认证的Onvif SOAP请求
我想要做的是通过Onvif接口使用IP摄像机。我从Onvif主页中的WSDL文件生成了Web服务,并添加了建议的here的自定义SOAP验证代码,并且我能够检索设备功能等等。
但是对于某些服务,例如PTZ控制,还需要HTTP认证。我的代码删除ClientCredentials
behaivor(所以是的,我想将它们设置没有任何意义,但我仍然留在希望,也许HTTP传输将尝试使用它们的那些行):
HttpTransportBindingElement httpBindingElement = new HttpTransportBindingElement();
httpBindingElement.AuthenticationScheme = AuthenticationSchemes.Basic;
...
PTZClient ptzClient = new PTZClient(customBinding, endPointAddress);
ptzClient.Endpoint.Behaviors.Remove(typeof(System.ServiceModel.Description.ClientCredentials));
UsernameClientCredentials onvifCredentials = new UsernameClientCredentials(new UsernameInfo(_username, _password));
ptzClient.Endpoint.Behaviors.Add(onvifCredentials);
ptzClient.ClientCredentials.UserName.UserName = _username;
ptzClient.ClientCredentials.UserName.Password = _password;
不过,当我看看wireshark,我发现生成了SOAP身份验证,但没有设置HTTP身份验证头(呃,我已经预料到了,因为我在这里有一个自定义的行为)。所以问题是,如果我以这种方式创建绑定,那么添加HTTP身份验证头文件的最佳选择是什么?我可以只添加一个消息检查器,如果有的话,任何示例?我必须创建一个不同的传输绑定?我见过有人建议其他人使用BasicHttpBinding
,然后设置Security
属性,但是在这种情况下,证书的位置在哪里?我如何将BasicHttpBinding
实例应用于我的绑定?是否有任何回调在WCF中被HTTP 401代码触发,我可以连接并提供头文件?这实际上是我第一次使用WCF,到目前为止,我已经完成了从互联网上找到的所有例子,但是对于这个特殊的问题,我一直无法找到任何东西。
我同意,但问题是,在给出的代码示例中,即使从服务器返回HTTP验证标头,连接也不会重试,而只是失败。 –