SQL Server 2008 és Reporting Services

SQL Server 2008 és Reporting Services
2010-06-04T09:48:36+02:00
2010-06-05T07:21:18+02:00
2022-11-18T00:07:07+01:00
petya8617
Üdvözletem!

A szerverünkre egy ASP.NET web-alkalmazást akarunk hostolni (IIS-en), ami az SQL Server-ben tárolt adatokról reportokat is megjelenít. A reportok megjelenítésért a SQL Server Reporting Services-e felelős – továbbiakban RS. A reportokat a webalkalmazás (ismétlem: ami az IIS-en fut) a RS-től kéri le webszolgáltatáson át. Űrlap alapú hitelesítéssel működik a webalkalmazásunk.

A probléma az, hogy a webalkalmazás nem tudja elérni ugyanezen a számítógépen futó RS-t, a hibaüzenet: "The request failed with HTTP status 401: Unauthorized.".

A RS ennek ellenére megfelelően működik, a telepítéskor az alapértelmezett beállításokat alkalmaztuk. Az RS Report Manager-e elérhető a serverről, azon kívülről illetve a reportokat is meg lehet hívni böngésző segítségével.

A webalkalmazás saját fejlesztésű, 2005-ös SQL Server RS-sel működik jelenleg is egy másik szolgáltatónál.

Sajnálatos módon, már régóta küzdünk ezzel a SQL Server 2008-as problémával, habár az ingyenes Express verzióval próbálkoztunk. Az interneten, fórumokban, szakirodalomban alig tesznek használható javaslatot a problémára. Bíztunk benne, hogy egy "bolti" SQL Server másként működik majd, de csalódtunk.

Találkozott már valaki ilyen problémával?

A segítséget előre is köszönöm.
Mutasd a teljes hozzászólást!
Hurrá, megoldottuk a problémát. Igenis van különbség az Express és a bolti SQL Server között. Mivel amikor beállítottuk a Basic authentikációt az Express RS-nél (így: http://msdn.microsoft.com/en-us/library/cc281309.aspx) akkor egy ilyen hibaüzenetet kaptunk ugyanitt, a ReportViewer-től:

The feature: "Custom security extensions" is not supported in this edition of Reporting Services. (rsOperationNotSupported)

De most az imént átállítottuk a bolti RS-ben az authentikációt Basic-re és megoldódott a dilemma, működik minden és itt már nincs rsOperationNotSupported.

Trükkösek ezek az MS-ék.

Minden esetre köszönjük a segítséget, reméljük másoknak is hasznos tippet adtunk.
Mutasd a teljes hozzászólást!

  • Egy kicsit konkretizáljuk azt a problémát. Most annyit tudunk, hogy van egy webalkalmazás, ami nem működik. Ebből nem tudom megmondani, hogy mit rontottatok el. Abban meg kár is volt reménykedni, hogy a fizetős verzióval működni fog, ami eddig hibaüzenetet dobott, ugyanis nyilvánvalóan ugyanazon a kódon alapul az SQL Server 2008 összes verziója, csak egyikben-másikban letiltanak/engedélyeznek funkciókat.

    De a lényeg: mutass valamit, ahol a hiba kialakul, és a beállításokat is részletezd egy kicsit (szerintem senki nem fog RS-t telepíteni, hogy megnézze mik az alapbeállítások ).
    Mutasd a teljes hozzászólást!
  • Bocsi, gondoltam, hogy ha megemlítem, hogy RS és 401, akkor a gyakorlottaknak rögtön eszükbe jut a problémáról valami.
    9.0-ás ReportView-ert használunk az RS eléréséhez a web-alkalmazásból.

    <rsweb:ReportViewer ID="_ReportViewer" runat="server" Font-Names="Verdana" Font-Size="8pt" Height="21cm" Width="29.7cm" ProcessingMode="Remote" meta:resourcekey="_ReportViewerResource1"> </rsweb:ReportViewer>

    A web-alkalmazásunk űrlap alapú hitelesítést használ. Így elvileg a hitelesítő adatokat el kell juttatnunk az RS-hez, ha egy reportot le akarunk kérni.


    protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { _ReportViewer.ServerReport.ReportPath = string.Format("{0}ProductSales", ConfigurationManager.AppSettings["ReportPath"]); _ReportViewer.ServerReport.ReportServerUrl = new Uri(ConfigurationManager.AppSettings["ReportServerUrl"].ToString()); _ReportViewer.ServerReport.ReportServerCredentials = new Security.ReportServerNetworkCredentials(); IList<ReportParameter> param = new List<ReportParameter>(); param.Add(new ReportParameter("DefaultCurrency", Security.Configuration.DefaultCurrency)); param.Add(new ReportParameter("ProductID", Request.QueryString["productID"].ToString())); _ReportViewer.ServerReport.SetParameters(param); //Itt keletkezik a kivétel } }

    A hitelesítő adatok átadásához egy osztályt készítettem, ami ReportServerNetworkCredentials néven (a IReportServerCredentials interfészt implementáltam):


    [Serializable] public sealed class ReportServerNetworkCredentials : IReportServerCredentials { public bool GetFormsCredentials(out System.Net.Cookie authCookie, out string userName, out string password, out string authority) { authCookie = null; userName = null; password = null; authority = null; return false; } public WindowsIdentity ImpersonationUser { get { return null; } } public System.Net.ICredentials NetworkCredentials { get { string domain = ConfigurationManager.AppSettings["ReportServerDomain"]; NetworkCredential n = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["ReportServerUserName"].ToString(), ConfigurationManager.AppSettings["ReportServerPassword"].ToString(), string.IsNullOrEmpty(domain) ? null : domain); return n; } } }

    A futásidejű kivétel:


    The request failed with HTTP status 401: Unauthorized.

    34. sor: param.Add(new ReportParameter("OwnerClientID", Security.Configuration.OwnerClientID.ToString()));
    35. sor: param.Add(new ReportParameter("DefaultCurrency", Security.Configuration.DefaultCurrency));
    36. sor: _ReportViewer.ServerReport.SetParameters(param);
    37. sor: }
    38. sor: }

    [WebException: The request failed with HTTP status 401: Unauthorized.]
    System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) +431237
    System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) +204
    Microsoft.SqlServer.ReportingServices2005.Execution.ReportExecutionService.LogonUser(String userName, String password, String authority) +80
    Microsoft.SqlServer.ReportingServices2005.Execution.RSExecutionConnection.LogonUser(String userName, String password, String authority) +87
    Microsoft.Reporting.WebForms.ServerReport.get_Service() +298
    Microsoft.Reporting.WebForms.ServerReport.GetExecutionInfo() +109
    Microsoft.Reporting.WebForms.ServerReport.SetParameters(IEnumerable`1 parameters) +67
    ProductsInStock.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\WebSite\AdminPages\Products\Reports\ProductsInStock.aspx.cs:36
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
    System.Web.UI.Control.OnLoad(EventArgs e) +99
    System.Web.UI.Control.LoadRecursive() +50
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627


    A hitelesítő adatok megfelelnek, a felhasználói név &#8211; amit a kód a konfigurációbol olvas ki &#8211; valós windows user és az RS-ben megadtam neki minden szükséges jogosultságot a reportok olvasásához. Ha böngészőből nézegetem a reportokat ezzel az account-tal, akkor minden rendben működik.
    Mutasd a teljes hozzászólást!
  • ASP.NET-ből még nem kellett kapcsolódnom hozzá, de máshonnan már elég sokszor, úgyhogy csak tippelgetek, aztán hátha jutunk valamire. Első tipp: gyanúsan sok a null ReportServerNetworkCredentials osztályodban. Biztosan jó az úgy?
    Mutasd a teljes hozzászólást!
  • Az RS nem form alapú hitelesítést használ így a GetFormsCredentials-nek nincs számottevő jelentősége.
    Mutasd a teljes hozzászólást!
  • Konkrétan Forms/Basic/Windows Authentication van hozzá.
    Mutasd a teljes hozzászólást!
  • Hurrá, megoldottuk a problémát. Igenis van különbség az Express és a bolti SQL Server között. Mivel amikor beállítottuk a Basic authentikációt az Express RS-nél (így: http://msdn.microsoft.com/en-us/library/cc281309.aspx) akkor egy ilyen hibaüzenetet kaptunk ugyanitt, a ReportViewer-től:

    The feature: "Custom security extensions" is not supported in this edition of Reporting Services. (rsOperationNotSupported)

    De most az imént átállítottuk a bolti RS-ben az authentikációt Basic-re és megoldódott a dilemma, működik minden és itt már nincs rsOperationNotSupported.

    Trükkösek ezek az MS-ék.

    Minden esetre köszönjük a segítséget, reméljük másoknak is hasznos tippet adtunk.
    Mutasd a teljes hozzászólást!
  • Uhh, most hirtelen nem tudom hol volt a link. A lényeg hogy az expres ugyebár alapból windows athenticationt akar.
    Úgy emlékszem mi annó egy kis regedittel megoldottuk. Googlen keress rá.

    Morzel
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd