c# - DefaultCredentials 在哪里拉出 "UserName"作为 web 请求的用户名?

标签 c# winforms reporting-services defaultnetworkcredentials credentialscache

有一个 WinForms 桌面应用程序试图连接到 SSRS 服务。报告服务器配置为接受 Active Directory 凭据登录以及特定用户的凭据以用于报告目的。在下面的代码部分,我们使用 WinForms ReportViewer:

reportViewer.ServerReport.ReportServerUrl = new Uri(_dboardServices.ReportingServicesUrl);
reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = CredentialCache.DefaultCredentials;

这在我的开发伙伴的机器上以及我们的大多数客户都运行良好。但是一些客户端遇到 401:System.Net.WebException:请求失败,HTTP 状态为 401:未经授权,来自 SoapHttpClient 系统。 有趣的是,我可以在我的机器上重现这个问题。使用 Fiddler 查看流量,NTLM 身份验证开始,然后“UserName”(字面意思!)作为用户名而不是我的真实用户名发送。显然那是失败的。

如果我使用正确的用户名、密码和域构建凭证 (reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = new NetworkCredential(goodUserName, goodPassword, domain);),我的请求就会成功。就像我导航到 SSRS asmx 链接并输入我的凭据一样。但是 CredentialCache.DefaultCredentials(应该默认为我的 AD 凭据)从某处提取此“用户名”。系统从哪里得到它?到目前为止,我搜索了我们的源代码和网络,但一无所获。

最佳答案

这可能是存储凭据的问题。通过在命令行运行 control keymgr.dll 查看您存储了哪些凭据。看这个article .

关于c# - DefaultCredentials 在哪里拉出 "UserName"作为 web 请求的用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19731347/

相关文章:

c# - 在选项卡控件中锚定表单

c# - WinForms 控件在较大屏幕上尺寸过大

reporting-services - SSRS Keep Together 属性不起作用

azure - 能否将 SSRS 订阅导出到 Azure 文件共享

sql-server - SSRS 2016 - 如何根据条件在同一页面位置显示图表

c# - Unity 2D - Sprite 在跟随物体时闪烁

c# - Serilog 不会将日志输出到 txt 文件中

c# - 将数据从 UserControl 传递到另一个

c# - 使用自动映射器 C# 进行映射时出现问题

c# - 数据库连接C#