当我使用 asmx 服务和 s-s-rS 报告服务时,我收到“请求失败,http 状态 401:未授权”
Posted
技术标签:
【中文标题】当我使用 asmx 服务和 s-s-rS 报告服务时,我收到“请求失败,http 状态 401:未授权”【英文标题】:when I use asmx service and s-s-rS report service I am getting "The request failed with http status 401: unauthorised" 【发布时间】:2020-03-17 13:56:45 【问题描述】:我试图通过在本地运行从我的 asp.net Web 应用程序调用报告相关服务 (asmx)。
然后发生了一个异常说。 The request failed with http status401:unauthorised
.
在我的分析中,我理解了由以下代码引起的问题
s-s-rSWebService.ReportingService2005 rs = new s-s-rSWebService.ReportingService2005();
rs.Credentials = new MyReportServerCredentials().NetworkCredentials;
和
Uri reportUri = new Uri(ConfigurationManager.AppSettings["ReportServerManagement.ReportingService2005"]);
this.rptViewer.ServerReport.ReportServerCredentials = new MyReportServerCredentials();
【问题讨论】:
【参考方案1】:在我的详细分析中,我了解到问题是因为 serviceObject.credential 或 ServerReport.ReportServerCredentials 中设置的凭据有误。这可以通过两种不同的方式来纠正,方法是使用以下代码将凭据设置为默认值
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;//"rs" is report object
或者找到下面的代码并在代码中设置正确的经过身份验证的用户凭据
public WindowsIdentity ImpersonationUser
get
// Use the default Windows user. Credentials will be
// provided by the NetworkCredentials property.
return null;
public ICredentials NetworkCredentials
get
// Read the user information from the Web.config file.
// By reading the information on demand instead of
// storing it, the credentials will not be stored in
// session, reducing the vulnerable surface area to the
// Web.config file, which can be secured with an ACL.
// User name
string userName =
<<AccurateUserName;>>
// Password
string password =
<<AccuratePassword;>>
// Domain
string domain = <<AccurateDomainName;>>
return new NetworkCredential(userName, password, domain);
为了检查哪个用户有访问权限,我们需要在网络浏览器中输入以 asmx 结尾的服务 url (http:/MyServiceHostedServer/MyService.asmx)。它将提示用户名和密码。提供我们的用户名:Domain\Username 和密码。如果我们能够看到 wsdl xml 文件,则该用户具有访问权限。
【讨论】:
以上是关于当我使用 asmx 服务和 s-s-rS 报告服务时,我收到“请求失败,http 状态 401:未授权”的主要内容,如果未能解决你的问题,请参考以下文章
报告服务 (s-s-rS):报告页脚在导出到 excel 时不起作用