----------背景------------------
我目前正在尝试在我们的内部网中为我们的员工构建一个Web界面。
我想在this的谎言上建立一些东西,他们是否能够
访问他们有权访问的报告,以及我们的一些应用程序
正致力于建立基于部门管理不同流程的建设。
我们有一个应用服务器和一个报告服务服务器(SQL 2008)。
----------到目前为止我做了什么--------------------
我添加了对http://prodrpt/ReportServer/reportservice2005.asmx的网络引用 我能够看到服务列表并通过Internet Explorer访问它们(当我直接导航到它们时)
Web Config使用 身份验证模式:Windows Identity Impersonate = true
--------------问题-------------------------------- -
当我尝试传递像这样的用户凭据时出现问题
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim res As String = "---"
Dim rs As New ReportingService2005()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim items As New prodrpt.CatalogItem()
For Each item In rs.ListChildren("/", True)
res = res + item.Name + " | " + item.Path + " | " + item.Type.ToString + "<br />"
Next
Response.Write(res)
cont.InnerHtml = res
End Sub
返回此错误
请求失败,HTTP状态为401:未经授权。
Line 925: [return: System.Xml.Serialization.XmlArrayAttribute("CatalogItems")]
Line 926: public CatalogItem[] ListChildren(string Item, bool Recursive) {
Line 927: object[] results = this.Invoke("ListChildren", new object[] {
Line 928: Item,
Line 929: Recursive});
[WebException: The request failed with HTTP status 401: Unauthorized.]
System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) +412782
System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) +300
prodrpt.ReportingService2005.ListChildren(String Item, Boolean Recursive) in c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\root\e22c2559\92c7e946\App_WebReferences.nrvcuhh0.1.cs:927
apps_Payroll_Main.Page_Load(Object sender, EventArgs e) in C:\inetpub\wwwroot\apps\Payroll\Main.aspx.vb:16
System.Web.UI.Control.OnLoad(EventArgs e) +132
System.Web.UI.Control.LoadRecursive() +66
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428
如果我替换rs.Credentials = System.Net.CredentialCache.DefaultCredentials
使用
rs.Credentials = New System.Net.NetworkCredential(“username”,“password”)
通过直接传递我的凭据,它可以工作,但我希望它能自动选择凭据。
我还注意到,如果我输入我的凭据,例如“DOMAIN \ username”,它会失败,但如果我只是在没有域名的情况下使用“用户名”,那就可以了。
我不知道在这一点上要尝试什么,我们将非常感谢任何帮助。
谢谢。
答案 0 :(得分:1)
如果您在IIS上运行您的网站,您是否收到了未经授权的消息?在内置开发服务器上运行应用程序时它是否有效?如果您仅在IIS上收到错误,我猜您必须将应用程序池标识设置为有权访问Web服务的域用户。