有一个WinForms
桌面应用程序尝试连接到SSRS
服务。报告服务器配置为接受 Active Directory 凭据登录以及特定用户的凭据以用于报告目的。在以下代码部分中,我们使用 a WinForms
ReportViewer
:
reportViewer.ServerReport.ReportServerUrl = new Uri(_dboardServices.ReportingServicesUrl);
reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = CredentialCache.DefaultCredentials;
这在我的开发伙伴的机器上运行良好,对于我们的大多数客户来说都很好。但是有些客户端会遇到 401: System.Net.WebException: The request failed with HTTP status 401: Unauthorized
,来自 SoapHttpClient 系统。有趣的是,我可以在我的机器上重现这个问题。使用 来查看流量Fiddler
,NTLM
身份验证开始,然后“用户名”(字面意思!)作为用户名而不是我的真实用户名发送。显然那是失败的。
如果我使用正确的用户名、密码和域 ( ) 构建凭据,reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = new NetworkCredential(goodUserName, goodPassword, domain);
我的请求就会成功。就像我导航到SSRS
asmx
链接并输入我的凭据一样。但是CredentialCache.DefaultCredentials
(应该默认为我的 AD 凭据)从某处提取此“用户名”。系统是从哪里得到的?到目前为止,我搜索了我们的源代码和网络,但没有运气。