这个问题已经在这里的几个主题中讨论过,但我找不到适合我的答案。
我想做的是通过 Onvif 接口使用 IP 摄像机。我已经从 Onvif 主页中可用的 WSDL 文件生成了 Web 服务,并按照此处的建议添加了自定义 SOAP 身份验证代码,并且我能够检索设备功能等。
但是对于某些服务,例如PTZ 控制,还需要HTTP 身份验证。我的代码删除了ClientCredentials
行为(所以是的,我想设置它们没有任何意义,但我仍然留下这些行,希望 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 的第一次体验,到目前为止,我已经从互联网上找到的示例中完成了所有工作,但是对于这个特定问题,我还没有找到任何东西。