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