Showing posts with label rs2005. Show all posts
Showing posts with label rs2005. Show all posts

Friday, March 30, 2012

rsInvalidPolicyDefinition - migration to another domain .....

Hi friends,

We have a problem with our RS2005 after migration into another domain.

The problem is that we have got duplicate access rights for the same AD usergroup.
When trying to remove or add a new AD group we get the error msg - "... role assignment is not valid. The role assignment is either empty or it specifies a user or group name that is already used in an existing role assignment for the current item. (rsInvalidPolicyDefinition)"

Books online gives no answers and neither does other serach engines .....

Anyone having a hint or solution .......

We have the same problem. Cannot remove some roles. I'm worried about if we need to make changes later, will we have to destroy the entire folder structure & re-create it in order to get rid of these roles/permissions?

rsInvalidPolicyDefinition - migration to another domain .....

Hi friends,

We have a problem with our RS2005 after migration into another domain.

The problem is that we have got duplicate access rights for the same AD usergroup.
When trying to remove or add a new AD group we get the error msg - "... role assignment is not valid. The role assignment is either empty or it specifies a user or group name that is already used in an existing role assignment for the current item. (rsInvalidPolicyDefinition)"

Books online gives no answers and neither does other serach engines .....

Anyone having a hint or solution .......

We have the same problem. Cannot remove some roles. I'm worried about if we need to make changes later, will we have to destroy the entire folder structure & re-create it in order to get rid of these roles/permissions?sql

Friday, March 23, 2012

RS2005's own SPs to add users to RS

Dear Anyone,

Is it possible to use Reporting Services' own stored procedure to add users directly into RS's security roles?

Thanks,

Joseph

Direct access to the RS catalog is not supported. Is there a reason why SOAP APIs are not enough?

Thanks

Tudor

sql

RS2005's own SPs to add users to RS

Dear Anyone,

Is it possible to use Reporting Services' own stored procedure to add users directly into RS's security roles?

Thanks,

Joseph

Direct access to the RS catalog is not supported. Is there a reason why SOAP APIs are not enough?

Thanks

Tudor

RS2005: ReportManager and Forms Authentication : The report server is not responding

Hi,

Sorry for the long post but I'll try to give a maximum of information.

I've tried to implement Form Authentication for Reporting Services. Right now, just about everything works as I would hope for, i.e.:

When I try to access http://<server>/ReportServer$SQLSERVER_2005, I am redirected to the authentication form.

When successfully authenticated, I can access the report

I can display reports throught the ReportViewer Web control by passing the authentication cookie.

Etc.

(Note: My implementation of Form Authentication was inspired by http://www.devx.com/dotnet/Article/26759/0/page/1 which seems similar to Microsoft Sample)

(The $SQLSERVER_2005 suffix is because SQL Server 2000 is also installed on the server, but I don't think Reporting Services 2000 is installed)

There is one thing which does not work however and it is the Report Manager.

When I try to access http://<server>/Reports$SQLSERVER_2005, I would expect to be redirected to the /Pages/UILogon.aspx page. Instead, I get an error page with the following message:

"The report server is not responding. Verify that the report server is running and can be accessed from this computer."

Both ReportServer and Reports are on the same server, both have the same security on the folder and in IIS (6.0), both have Anonymous security access "checked".

If I revert to the old .config files (prior to my modifications for Form Authentication) and remove Anonymous from IIS for both sites, everything works fine (like it did after the installation).

Here are excerpts from the config files I've modified in ReportManager:

RSWebApplication.config:

<UI>
<CustomAuthenticationUI>
<loginUrl>/Pages/UILogon.aspx</loginUrl>
<UseSSL>False</UseSSL>
</CustomAuthenticationUI>
<ReportServerUrl>http://<servername>/ReportServer$SQLSERVER_2005</ReportServerUrl>
</UI>

rsmgrpolicy.config:

<CodeGroup
class="FirstMatchCodeGroup"
version="1"
PermissionSetName="FullTrust"
Description="This code group grants MyComputer code Execution permission. ">
<IMembershipCondition
class="ZoneMembershipCondition"
version="1"
Zone="MyComputer" />

Web.config:

<identity impersonate="false" />

Here is the content of the log ReportServerWebApp_*.log (see error in bold):

<Header>
<Product>Microsoft SQL Server Reporting Services Version 9.00.1399.00</Product>
<Locale>en-US</Locale>
<TimeZone>Eastern Standard Time</TimeZone>
<Path>C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\LogFiles\ReportServerWebApp__11_10_2006_08_32_34.log</Path>
<SystemName>MSCAPP02</SystemName>
<OSName>Microsoft Windows NT 5.2.3790 Service Pack 1</OSName>
<OSVersion>5.2.3790.65536</OSVersion>
</Header>
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing MaxActiveReqForOneUser to '20' requests(s) as specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing MaxScheduleWait to default value of '1' second(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing DatabaseQueryTimeout to default value of '30' second(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing ProcessRecycleOptions to default value of '0' because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing RunningRequestsScavengerCycle to default value of '30' second(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing RunningRequestsDbCycle to default value of '30' second(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing RunningRequestsAge to default value of '30' second(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing CleanupCycleMinutes to default value of '10' minute(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing DailyCleanupMinuteOfDay to default value of '120' minutes since midnight because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing WatsonFlags to default value of '1064' because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing WatsonDumpOnExceptions to default value of 'Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException,Microsoft.ReportingServices.Modeling.InternalModelingException' because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing WatsonDumpExcludeIfContainsExceptions to default value of 'System.Data.SqlClient.SqlException,System.Threading.ThreadAbortException' because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing SecureConnectionLevel to default value of '1' because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing DisplayErrorLink to 'True' as specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing WebServiceUseFileShareStorage to default value of 'False' because it was not specified in Configuration file.
w3wp!ui!5!11/10/2006-08:32:39:: e ERROR: The report server is not responding. Verify that the report server is running and can be accessed from this computer.
w3wp!ui!5!11/10/2006-08:32:39:: e ERROR: HTTP status code --> 500
-Details--
Microsoft.ReportingServices.UI.Global+RSWebServiceWrapper+CantCommunicateWithReportServerException: The report server is not responding. Verify that the report server is running and can be accessed from this computer.

at Microsoft.ReportingServices.UI.Global.RSWebServiceWrapper.GetSecureMethods()

at Microsoft.SqlServer.ReportingServices2005.RSConnection.IsSecureMethod(String methodname)

at Microsoft.SqlServer.ReportingServices2005.RSConnection.ValidateConnection()

at Microsoft.ReportingServices.UI.ReportingPage.EnsureHttpsLevel(HttpsLevel level)

at Microsoft.ReportingServices.UI.ReportingPage.ReportingPage_Init(Object sender, EventArgs args)

at System.EventHandler.Invoke(Object sender, EventArgs e)

at System.Web.UI.Control.OnInit(EventArgs e)

at System.Web.UI.Page.OnInit(EventArgs e)

at System.Web.UI.Control.InitRecursive(Control namingContainer)

at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
w3wp!ui!5!11/10/2006-08:32:40:: e ERROR: Exception in ShowErrorPage: System.Threading.ThreadAbortException: Thread was being aborted.
at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.End()
at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
at Microsoft.ReportingServices.UI.ReportingPage.ShowErrorPage(String errMsg) at at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.End()
at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
at Microsoft.ReportingServices.UI.ReportingPage.ShowErrorPage(String errMsg)

So that's it. Thanks for any help you can provide.

Nicolas

So? Anyone can assist me? Is this the right place to post an issue like this. I've searched a lot on the Web and I've yet to find a solution. The error message doesn't help me much either (As far as I can see, the report server is running since I can display the reports).|||

Here is something you can start with for investigation:

1. Check reportserver log file to see whether there is any error there.

2. Check IIS logging to make sure the request does get to report server (some times you need to iisreset to flush the most recent result).

3. You can use some tcp tracing tool to check the traffic between report manager and report server to check if anything wrong.

|||

Hi Yalei,

First, thanks for you help.

1. Check reportserver log file to see whether there is any error there:

Assuming you are refering to one of the "\Reporting Services\LogFiles\reportserver_*.log", i don't see anything wrong there. No "ERRORS", only "INFO". An entry such as the following:

"w3wp!library!5!11/14/2006-14:44:08:: i INFO: Cleaned 0 batch records, 0 policies, 0 sessions, 0 cache entries, 0 snapshots, 0 chunks, 0 running jobs, 0 persisted streams"

appears every 10 minutes. The log doesn't seem to react when I access http://<servername>/Reports$SQLSERVER_2005.

2. Check IIS logging to make sure the request does get to report server (some times you need to iisreset to flush the most recent result).

Below is a sample of my IIS Logging. I don't know if you can see something in it? Something that strikes me as strange is the time (the request is done circa 15:10 and the displayed hour is 20:17). The server time seems alright (i.e. circa 15:10) so I don't know where the logging gets its timestamp... Could this be the source of the problem?

Note: XXX.XXX.XXX.XXX is the server IP and YYY.YYY.YYY.YYY is the client IP.

#Date: 2006-11-14 20:17:04
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status
2006-11-14 20:17:04 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005 - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 301 0 0
2006-11-14 20:17:21 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/Home.aspx - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 302 0 0
2006-11-14 20:17:26 W3SVC1 XXX.XXX.XXX.XXX POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - XXX.XXX.XXX.XXX - 302 0 0
2006-11-14 20:17:26 W3SVC1 XXX.XXX.XXX.XXX GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - XXX.XXX.XXX.XXX - 200 0 0
2006-11-14 20:17:28 W3SVC1 XXX.XXX.XXX.XXX POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - XXX.XXX.XXX.XXX - 302 0 0
2006-11-14 20:17:28 W3SVC1 XXX.XXX.XXX.XXX GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - XXX.XXX.XXX.XXX - 200 0 0
2006-11-14 20:17:29 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/Pages/Folder.aspx - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 500 0 0

2006-11-14 20:20:55 W3SVC1 XXX.XXX.XXX.XXX POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - XXX.XXX.XXX.XXX - 302 0 0
2006-11-14 20:20:55 W3SVC1 XXX.XXX.XXX.XXX GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - XXX.XXX.XXX.XXX - 200 0 0
2006-11-14 20:20:55 W3SVC1 XXX.XXX.XXX.XXX POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - XXX.XXX.XXX.XXX - 302 0 0
2006-11-14 20:20:55 W3SVC1 XXX.XXX.XXX.XXX GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - XXX.XXX.XXX.XXX - 200 0 0
2006-11-14 20:20:57 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/Pages/Folder.aspx - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 500 0 0
2006-11-14 20:20:57 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/js/ReportingServices.js - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 200 0 64
2006-11-14 20:20:57 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/styles/ReportingServices.css - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 200 0 64
2006-11-14 20:20:57 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/images/blank.gif - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 200 0 64
2006-11-14 20:20:57 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/images/48error.jpg - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 200 0 64

3. You can use some tcp tracing tool to check the traffic between report manager and report server to check if anything wrong.

Could this really cause problems? Like I've said, both report server and report manager are on the same machine. Also, when I use the "original" ".config" for Report Server and Report Manager, everything works OK. Do you still think it would be wortwhile to use TCP tracing tools? If so, can you recommend one (never used those...)?

Thanks again

|||

The following is suspicious. It happens again and again in the log. It is the redirection at Report Server. It should not happen when you perform login from report manager. This means from you cutomized UI login page at report manager, the forms auth cookie does not get passed in. You need to check that you called LogonUser soap API, retrieved the forms auth cookie and passed in the following request to report server.

2006-11-14 20:17:26 W3SVC1 XXX.XXX.XXX.XXX POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - XXX.XXX.XXX.XXX - 302 0 0
2006-11-14 20:17:26 W3SVC1 XXX.XXX.XXX.XXX GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - XXX.XXX.XXX.XXX - 200 0 0

|||

Thanks again for your support.

I do call LogonUser in my UILogon.aspx page (as well as my /MyWorkspace/Login.aspx page used for Report Server and my application). One thing I find weird is that when I access http://MSCAPP02/Reports$SQLSERVER_2005/, I am not redirected to the UILogon.aspx page. However, I can access the UILogon page directly and the page seems to work well by itself. Don't know why I keep getting redirected to Login.aspx. Here's the IIS Log when I log through the UILogon.aspx page:

2006-11-15 17:17:13 W3SVC1 172.17.70.73 GET /Reports$SQLSERVER_2005/Pages/UILogon.aspx - 80 - 142.101.228.177 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 200 0 0
2006-11-15 17:17:35 W3SVC1 172.17.70.73 POST /ReportServer$SQLSERVER_2005/ReportService.asmx - 80 - 172.17.70.73 - 200 0 0
2006-11-15 17:17:35 W3SVC1 172.17.70.73 POST /Reports$SQLSERVER_2005/Pages/UILogon.aspx - 80 - 142.101.228.177 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 302 0 0
2006-11-15 17:17:35 W3SVC1 172.17.70.73 POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - 172.17.70.73 - 302 0 0
2006-11-15 17:17:35 W3SVC1 172.17.70.73 GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - 172.17.70.73 - 200 0 0
2006-11-15 17:17:36 W3SVC1 172.17.70.73 POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - 172.17.70.73 - 302 0 0
2006-11-15 17:17:36 W3SVC1 172.17.70.73 GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - 172.17.70.73 - 200 0 0
2006-11-15 17:17:37 W3SVC1 172.17.70.73 GET /Reports$SQLSERVER_2005/Pages/Folder.aspx - 80 - 142.101.228.177 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 500 0 0

As I've said earlier, my code is mostly taken from an online tutorial. The code for the UILogon.aspx page is similar to that of my Login.aspx page. There does seem to be a good quantity of code to pass the auth cookie around (can't say I understand why all of this code does). In case you want to take a peek, here it is:

The code for the authentication in UILogon:

private void BtnLogon_Click(object sender, System.EventArgs e)
{
bool passwordVerified = false;
string sMsg = "";
string sUrl = "";

try
{
ReportServerProxy server = new ReportServerProxy();
server.Url = AuthenticationUtilities.GetWebServiceUrl();
server.LogonUser(TxtUser.Text, TxtPwd.Text, null);
passwordVerified = true;
}
catch (Exception ex)
{
return;
}
if (passwordVerified == true)
{
lblMessage.Text = "Logon successful: User is authenticated";
string redirectUrl = Request.QueryString["ReturnUrl"];
if (redirectUrl != null) HttpContext.Current.Response.Redirect(redirectUrl, false);
else HttpContext.Current.Response.Redirect("./Folder.aspx", false);
}
else
{
lblMessage.Text = "Invalid username or password";
}
}

... And the code for the ReportServerProxy which takes care of the cookie...

public class ReportServerProxy : ReportingService
{
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest request;
request = (HttpWebRequest)HttpWebRequest.Create(uri);

// Create a cookie jar to hold the request cookie
CookieContainer cookieJar = new CookieContainer();
request.CookieContainer = cookieJar;
Cookie authCookie = AuthCookie;

// if the client already has an auth cookie
// place it in the request's cookie container
if (authCookie != null) request.CookieContainer.Add(authCookie);

request.Timeout = -1;
request.Headers.Add("Accept-Language", HttpContext.Current.Request.Headers["Accept-Language"]);
return request;
}

protected override WebResponse GetWebResponse(WebRequest request)
{
WebResponse response = base.GetWebResponse(request);
string cookieName = response.Headers["RSAuthenticationHeader"];

// If the response contains an auth header, store the cookie
if (cookieName != null)
{
Utilities.CustomAuthCookieName = cookieName;
HttpWebResponse webResponse = (HttpWebResponse)response;
Cookie authCookie = webResponse.Cookies[cookieName];

// If the auth cookie is null, throw an exception
if (authCookie == null)
{
throw new Exception("Authorization ticket not received by LogonUser");
}

// otherwise save it for this request
AuthCookie = authCookie;

// and send it to the client
Utilities.RelayCookieToClient(authCookie);
}
return response;
}

private Cookie AuthCookie
{
get
{
if (m_Authcookie == null)
m_Authcookie = Utilities.TranslateCookie(
HttpContext.Current.Request.Cookies[Utilities.CustomAuthCookieName]);
return m_Authcookie;
}
set
{
m_Authcookie = value;
}
}
private Cookie m_Authcookie = null;
}

... And the code for the Utilities class...

internal sealed class Utilities
{
internal static string CustomAuthCookieName
{
get
{
lock (m_cookieNamelockRoot)
{
return m_cookieName;
}
}
set
{
lock (m_cookieNamelockRoot)
{
m_cookieName = value;
}
}
}

private static string m_cookieName;
private static object m_cookieNamelockRoot = new object();

private static HttpCookie TranslateCookie(Cookie netCookie)
{
if (netCookie == null) return null;

HttpCookie webCookie = new HttpCookie(netCookie.Name, netCookie.Value);

// Add domain only if it is dotted - IE doesn't send back the cookie
// if we set the domain otherwise
if (netCookie.Domain.IndexOf('.') != -1)
webCookie.Domain = netCookie.Domain;

webCookie.Expires = netCookie.Expires;
webCookie.Path = netCookie.Path;
webCookie.Secure = netCookie.Secure;
return webCookie;
}

internal static Cookie TranslateCookie(HttpCookie webCookie)
{
if (webCookie == null) return null;
Cookie netCookie = new Cookie(webCookie.Name, webCookie.Value);

if (webCookie.Domain == null)
netCookie.Domain = HttpContext.Current.Request.ServerVariables["SERVER_NAME"];

netCookie.Expires = webCookie.Expires;
netCookie.Path = webCookie.Path;
netCookie.Secure = webCookie.Secure;
return netCookie;
}

internal static void RelayCookieToClient(Cookie cookie)
{
// add the cookie if not already in there
if (HttpContext.Current.Response.Cookies[cookie.Name] == null)
{
HttpContext.Current.Response.Cookies.Remove(cookie.Name);
}
HttpContext.Current.Response.SetCookie(TranslateCookie(cookie));
}
}

Sorry for the long post with lots of code. I'm not used to posting in forums so I'm not sure what is the best way to do this.

Like I said, this is basically the same code used by the Login.aspx page and it seems to work great there, so I guess it should be alright.

One thing I find kind of strange is the following in the Report Manger web.config:

<system.web>
[...]
<authentication mode="Windows" />
<identity impersonate="false" />
[...]
</system.web>

The step by step guide didn't ask to change it but should'nt this be mode="Forms"?

Thanks again, your support is really appreciated.

|||

Have you tried using hardcoding the url using \\localhost\ instead of machine IP in place of GetWebServiceURL().

string sUrl = "";
try
{
ReportServerProxy server = new ReportServerProxy();
server.Url = /ReportService2005.asmx" href="http://links.10026.com/?link=http://localhost/_3CREPORTSERVER_3E/ReportService2005.asmx">http://localhost/<REPORTSERVER>/ReportService2005.asmx;
server.LogonUser(TxtUser.Text, TxtPwd.Text, null);
passwordVerified = true;
}
catch (Exception ex)
{
return;
}

|||

Hi Ross, thanks for your input.

Previously (a few days ago) GetWebServiceURL() was reading the url in a config file. But since I had problems with that, I modified GetWebServiceURL() to return a hardcoded string. Mine was http://<servername>/<reportserver>/ReportService.asmx instead of your http://localhost/<REPORTSERVER>/ReportService2005.asmx. So I decided to try yours but if anything, it is worse, i.e. when I authenticate from UILogon.aspx with my string, I get redirected to the error page:

"The report server is not responding. Verify that the report server is running and can be accessed from this computer"

When I use your string, I get the following exception:

System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: http://schemas.microsoft.com/sqlserver/2003/12/reporting/reportingservices/LogonUser. at System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest() at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message) at System.Web.Services.Protocols.SoapServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)

However, in both cases, if I try to access http://<servername>/Reports$SQLSERVER_2005/, I get the error page...

"The report server is not responding. Verify that the report server is running and can be accessed from this computer"

...instead of being redirected to the UILogon.aspx page (which I find puzzling).

Also, what's the difference between ReportService.asmx and ReportService2005.asmx? I sometimes wonder if this may be the source of my problems. Everywhere in my code, I was using ReportService.asmx.

Thanks

|||

Well it sounds like the web server is listening. However you may be passing a parameter in the HTTP request that does not match what the server is expecting.

I would double check to make sure the interface you are implementing is the one you are targeting.

using Microsoft.SqlServer.ReportingServices.ReportService2005;

....

public class ReportServerProxy : RS.ReportExecutionService

Where RS is a reference to /ReportServer/reportExecution2005.asmx" href="http://links.10026.com/?link=http://_3Crsserver_3E/ReportServer/reportExecution2005.asmx">http://<RSSERVER>/ReportServer/reportExecution2005.asmx

|||

Hi again Ross.

I've seen the following post: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=119960&SiteID=1 which answers the ReportService.asmx vs ReportService2005.asmx question. If I undrestand the answer correctly, I should be able to use ReportService.asmx, with a reduced feature set. Perhaps this reduced feature set means I can't use the 2005 version of Report Manager...

If you look at the code I posted, you'll see that I wasn't refering to ReportService2005 (in ReportService2005.asmx) but ReportService (in ReportService.asmx). Also, my proxy wasn't extending you RS.ReportExecutionService but the ReportingService class. So the exception is expected, in a way.

I'll try to rework my implementation using ReportService2005.asmx to see if I have any more luck and I'll let you know. I hope I don't have to change too many things as most of the code wasn't written by me, it was taken from a tutorial online.

|||

Hi Nicolas,

I'm a little bit past the issue you're having. I struggled with it a long......... time. As long as I run Report Server and Report Manager on the same machine things are fine with my custom security extension. The key in my case was to use the full machine.domain.com name everywhere. By everywhere I mean in both web.config files, the RSWebApplication.config file for ReportManager and the RSReportServer.config file on report server. Finally, in your browser always refrence the report manager url with the full machine.domain.com url never just 'machine' and certainly not with just localhost. I don't have the instance names as part of my VDirs but otherwise things are setup pretty similar to yours.

The problem I'm currently having is I'm trying to run ReportManager on a different box than ReportServer I get the exact same exception messages that you're seeing.

If anyone can verify that its possible to run ReportManager and ReportServer on different machines with a custom security extension I'd love to hear about it. I've also got a support call open with Microsoft and we're working the issue. I'll let the forum know how it turns out.....

cheers
Perry

|||

Hi Perry,

Thanks for your input.

In my case, I don't have a "machine.domain.com" (or if I do, i don't know what it is). This is a developpement server in an intranet. However, I do use the servername "everywhere" (i.e. in the config files and in the way I type my url in my browser). I think the key is just to be consistent in how you address it. Otherwise, I guess I could type in the IP address everywhere.

When you say your setup is similar to mine, do you mean my current setup (using "ReportService.asmx") or the one I was about to convert to (using "ReportService2005.asmx)?

As for running the services from different servers, have you seen the post below? You may find some clues in there...

http://groups.google.ca/group/microsoft.public.sqlserver.reportingsvcs/browse_frm/thread/991c9178ceab8f58/8f1a447aa60ad837?lnk=st&q=reporting+services+the+server+is+not+responding&rnum=3&hl=en#8f1a447aa60ad837

Thanks again

|||

Nicolas,

Did you ever work past your issue? I'm having an issue with a custom security extension that is a little different but related to cookies being passed from Report Manager to Reporting Services and I found your post. I'm curious if your problem was solved and if the solution would help me in any way.

Thanks,

Kyle

|||

Hi Kyle,

I haven't spent more time on the issue since my last post as other matters required my attention. However, I do plan to revisit the issue in the near future. If I do manage to make it work, I'll post here. If you have any solution hints on your side, these would be appreciated as well.

Cheers,

Nicolas

|||

Hey Nicolas,

I'm not 100% working but finally did find the major hang up I was having. Turns out it's a bug in how cookies are passed by controls in Report Manager. Namely when trying to view a report the custom authentication cookie is not passed to the Report Server.

Check this KB article just in case you're getting this error. The patch was free to get from support and it should be in the next service pack. If you get back to this and you're still stuck let me know. I know more about custom extensions then I ever planned on knowing at this point. :)

Happy Coding!

Kyle

www.kylefinley.net

RS2005: ReportManager and Forms Authentication : The report server is not responding

Hi,

Sorry for the long post but I'll try to give a maximum of information.

I've tried to implement Form Authentication for Reporting Services. Right now, just about everything works as I would hope for, i.e.:

When I try to access http://<server>/ReportServer$SQLSERVER_2005, I am redirected to the authentication form. When successfully authenticated, I can access the report I can display reports throught the ReportViewer Web control by passing the authentication cookie. Etc.

(Note: My implementation of Form Authentication was inspired by http://www.devx.com/dotnet/Article/26759/0/page/1 which seems similar to Microsoft Sample)

(The $SQLSERVER_2005 suffix is because SQL Server 2000 is also installed on the server, but I don't think Reporting Services 2000 is installed)

There is one thing which does not work however and it is the Report Manager.

When I try to access http://<server>/Reports$SQLSERVER_2005, I would expect to be redirected to the /Pages/UILogon.aspx page. Instead, I get an error page with the following message:

"The report server is not responding. Verify that the report server is running and can be accessed from this computer."

Both ReportServer and Reports are on the same server, both have the same security on the folder and in IIS (6.0), both have Anonymous security access "checked".

If I revert to the old .config files (prior to my modifications for Form Authentication) and remove Anonymous from IIS for both sites, everything works fine (like it did after the installation).

Here are excerpts from the config files I've modified in ReportManager:

RSWebApplication.config:

<UI>
<CustomAuthenticationUI>
<loginUrl>/Pages/UILogon.aspx</loginUrl>
<UseSSL>False</UseSSL>
</CustomAuthenticationUI>
<ReportServerUrl>http://<servername>/ReportServer$SQLSERVER_2005</ReportServerUrl>
</UI>

rsmgrpolicy.config:

<CodeGroup
class="FirstMatchCodeGroup"
version="1"
PermissionSetName="FullTrust"
Description="This code group grants MyComputer code Execution permission. ">
<IMembershipCondition
class="ZoneMembershipCondition"
version="1"
Zone="MyComputer" />

Web.config:

<identity impersonate="false" />

Here is the content of the log ReportServerWebApp_*.log (see error in bold):

<Header>
<Product>Microsoft SQL Server Reporting Services Version 9.00.1399.00</Product>
<Locale>en-US</Locale>
<TimeZone>Eastern Standard Time</TimeZone>
<Path>C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\LogFiles\ReportServerWebApp__11_10_2006_08_32_34.log</Path>
<SystemName>MSCAPP02</SystemName>
<OSName>Microsoft Windows NT 5.2.3790 Service Pack 1</OSName>
<OSVersion>5.2.3790.65536</OSVersion>
</Header>
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing MaxActiveReqForOneUser to '20' requests(s) as specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing MaxScheduleWait to default value of '1' second(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing DatabaseQueryTimeout to default value of '30' second(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing ProcessRecycleOptions to default value of '0' because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing RunningRequestsScavengerCycle to default value of '30' second(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing RunningRequestsDbCycle to default value of '30' second(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing RunningRequestsAge to default value of '30' second(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing CleanupCycleMinutes to default value of '10' minute(s) because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing DailyCleanupMinuteOfDay to default value of '120' minutes since midnight because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing WatsonFlags to default value of '1064' because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing WatsonDumpOnExceptions to default value of 'Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException,Microsoft.ReportingServices.Modeling.InternalModelingException' because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing WatsonDumpExcludeIfContainsExceptions to default value of 'System.Data.SqlClient.SqlException,System.Threading.ThreadAbortException' because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing SecureConnectionLevel to default value of '1' because it was not specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing DisplayErrorLink to 'True' as specified in Configuration file.
w3wp!library!5!11/10/2006-08:32:35:: i INFO: Initializing WebServiceUseFileShareStorage to default value of 'False' because it was not specified in Configuration file.
w3wp!ui!5!11/10/2006-08:32:39:: e ERROR: The report server is not responding. Verify that the report server is running and can be accessed from this computer.
w3wp!ui!5!11/10/2006-08:32:39:: e ERROR: HTTP status code --> 500
-Details--
Microsoft.ReportingServices.UI.Global+RSWebServiceWrapper+CantCommunicateWithReportServerException: The report server is not responding. Verify that the report server is running and can be accessed from this computer.

at Microsoft.ReportingServices.UI.Global.RSWebServiceWrapper.GetSecureMethods()

at Microsoft.SqlServer.ReportingServices2005.RSConnection.IsSecureMethod(String methodname)

at Microsoft.SqlServer.ReportingServices2005.RSConnection.ValidateConnection()

at Microsoft.ReportingServices.UI.ReportingPage.EnsureHttpsLevel(HttpsLevel level)

at Microsoft.ReportingServices.UI.ReportingPage.ReportingPage_Init(Object sender, EventArgs args)

at System.EventHandler.Invoke(Object sender, EventArgs e)

at System.Web.UI.Control.OnInit(EventArgs e)

at System.Web.UI.Page.OnInit(EventArgs e)

at System.Web.UI.Control.InitRecursive(Control namingContainer)

at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
w3wp!ui!5!11/10/2006-08:32:40:: e ERROR: Exception in ShowErrorPage: System.Threading.ThreadAbortException: Thread was being aborted.
at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.End()
at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
at Microsoft.ReportingServices.UI.ReportingPage.ShowErrorPage(String errMsg) at at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.End()
at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
at Microsoft.ReportingServices.UI.ReportingPage.ShowErrorPage(String errMsg)

So that's it. Thanks for any help you can provide.

Nicolas

So? Anyone can assist me? Is this the right place to post an issue like this. I've searched a lot on the Web and I've yet to find a solution. The error message doesn't help me much either (As far as I can see, the report server is running since I can display the reports).|||

Here is something you can start with for investigation:

1. Check reportserver log file to see whether there is any error there.

2. Check IIS logging to make sure the request does get to report server (some times you need to iisreset to flush the most recent result).

3. You can use some tcp tracing tool to check the traffic between report manager and report server to check if anything wrong.

|||

Hi Yalei,

First, thanks for you help.

1. Check reportserver log file to see whether there is any error there:

Assuming you are refering to one of the "\Reporting Services\LogFiles\reportserver_*.log", i don't see anything wrong there. No "ERRORS", only "INFO". An entry such as the following:

"w3wp!library!5!11/14/2006-14:44:08:: i INFO: Cleaned 0 batch records, 0 policies, 0 sessions, 0 cache entries, 0 snapshots, 0 chunks, 0 running jobs, 0 persisted streams"

appears every 10 minutes. The log doesn't seem to react when I access http://<servername>/Reports$SQLSERVER_2005.

2. Check IIS logging to make sure the request does get to report server (some times you need to iisreset to flush the most recent result).

Below is a sample of my IIS Logging. I don't know if you can see something in it? Something that strikes me as strange is the time (the request is done circa 15:10 and the displayed hour is 20:17). The server time seems alright (i.e. circa 15:10) so I don't know where the logging gets its timestamp... Could this be the source of the problem?

Note: XXX.XXX.XXX.XXX is the server IP and YYY.YYY.YYY.YYY is the client IP.

#Date: 2006-11-14 20:17:04
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status
2006-11-14 20:17:04 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005 - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 301 0 0
2006-11-14 20:17:21 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/Home.aspx - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 302 0 0
2006-11-14 20:17:26 W3SVC1 XXX.XXX.XXX.XXX POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - XXX.XXX.XXX.XXX - 302 0 0
2006-11-14 20:17:26 W3SVC1 XXX.XXX.XXX.XXX GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - XXX.XXX.XXX.XXX - 200 0 0
2006-11-14 20:17:28 W3SVC1 XXX.XXX.XXX.XXX POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - XXX.XXX.XXX.XXX - 302 0 0
2006-11-14 20:17:28 W3SVC1 XXX.XXX.XXX.XXX GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - XXX.XXX.XXX.XXX - 200 0 0
2006-11-14 20:17:29 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/Pages/Folder.aspx - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 500 0 0

2006-11-14 20:20:55 W3SVC1 XXX.XXX.XXX.XXX POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - XXX.XXX.XXX.XXX - 302 0 0
2006-11-14 20:20:55 W3SVC1 XXX.XXX.XXX.XXX GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - XXX.XXX.XXX.XXX - 200 0 0
2006-11-14 20:20:55 W3SVC1 XXX.XXX.XXX.XXX POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - XXX.XXX.XXX.XXX - 302 0 0
2006-11-14 20:20:55 W3SVC1 XXX.XXX.XXX.XXX GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - XXX.XXX.XXX.XXX - 200 0 0
2006-11-14 20:20:57 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/Pages/Folder.aspx - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 500 0 0
2006-11-14 20:20:57 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/js/ReportingServices.js - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 200 0 64
2006-11-14 20:20:57 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/styles/ReportingServices.css - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 200 0 64
2006-11-14 20:20:57 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/images/blank.gif - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 200 0 64
2006-11-14 20:20:57 W3SVC1 XXX.XXX.XXX.XXX GET /Reports$SQLSERVER_2005/images/48error.jpg - 80 - YYY.YYY.YYY.YYY Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 200 0 64

3. You can use some tcp tracing tool to check the traffic between report manager and report server to check if anything wrong.

Could this really cause problems? Like I've said, both report server and report manager are on the same machine. Also, when I use the "original" ".config" for Report Server and Report Manager, everything works OK. Do you still think it would be wortwhile to use TCP tracing tools? If so, can you recommend one (never used those...)?

Thanks again

|||

The following is suspicious. It happens again and again in the log. It is the redirection at Report Server. It should not happen when you perform login from report manager. This means from you cutomized UI login page at report manager, the forms auth cookie does not get passed in. You need to check that you called LogonUser soap API, retrieved the forms auth cookie and passed in the following request to report server.

2006-11-14 20:17:26 W3SVC1 XXX.XXX.XXX.XXX POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - XXX.XXX.XXX.XXX - 302 0 0
2006-11-14 20:17:26 W3SVC1 XXX.XXX.XXX.XXX GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - XXX.XXX.XXX.XXX - 200 0 0

|||

Thanks again for your support.

I do call LogonUser in my UILogon.aspx page (as well as my /MyWorkspace/Login.aspx page used for Report Server and my application). One thing I find weird is that when I access http://MSCAPP02/Reports$SQLSERVER_2005/, I am not redirected to the UILogon.aspx page. However, I can access the UILogon page directly and the page seems to work well by itself. Don't know why I keep getting redirected to Login.aspx. Here's the IIS Log when I log through the UILogon.aspx page:

2006-11-15 17:17:13 W3SVC1 172.17.70.73 GET /Reports$SQLSERVER_2005/Pages/UILogon.aspx - 80 - 142.101.228.177 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 200 0 0
2006-11-15 17:17:35 W3SVC1 172.17.70.73 POST /ReportServer$SQLSERVER_2005/ReportService.asmx - 80 - 172.17.70.73 - 200 0 0
2006-11-15 17:17:35 W3SVC1 172.17.70.73 POST /Reports$SQLSERVER_2005/Pages/UILogon.aspx - 80 - 142.101.228.177 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 302 0 0
2006-11-15 17:17:35 W3SVC1 172.17.70.73 POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - 172.17.70.73 - 302 0 0
2006-11-15 17:17:35 W3SVC1 172.17.70.73 GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - 172.17.70.73 - 200 0 0
2006-11-15 17:17:36 W3SVC1 172.17.70.73 POST /ReportServer$SQLSERVER_2005/ReportService2005.asmx - 80 - 172.17.70.73 - 302 0 0
2006-11-15 17:17:36 W3SVC1 172.17.70.73 GET /MyWorkspace/login.aspx ReturnUrl=%2fReportServer%24SQLSERVER_2005%2fReportService2005.asmx 80 - 172.17.70.73 - 200 0 0
2006-11-15 17:17:37 W3SVC1 172.17.70.73 GET /Reports$SQLSERVER_2005/Pages/Folder.aspx - 80 - 142.101.228.177 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322;+.NET+CLR+1.0.3705;+.NET+CLR+2.0.50727) 500 0 0

As I've said earlier, my code is mostly taken from an online tutorial. The code for the UILogon.aspx page is similar to that of my Login.aspx page. There does seem to be a good quantity of code to pass the auth cookie around (can't say I understand why all of this code does). In case you want to take a peek, here it is:

The code for the authentication in UILogon:

private void BtnLogon_Click(object sender, System.EventArgs e)
{
bool passwordVerified = false;
string sMsg = "";
string sUrl = "";

try
{
ReportServerProxy server = new ReportServerProxy();
server.Url = AuthenticationUtilities.GetWebServiceUrl();
server.LogonUser(TxtUser.Text, TxtPwd.Text, null);
passwordVerified = true;
}
catch (Exception ex)
{
return;
}
if (passwordVerified == true)
{
lblMessage.Text = "Logon successful: User is authenticated";
string redirectUrl = Request.QueryString["ReturnUrl"];
if (redirectUrl != null) HttpContext.Current.Response.Redirect(redirectUrl, false);
else HttpContext.Current.Response.Redirect("./Folder.aspx", false);
}
else
{
lblMessage.Text = "Invalid username or password";
}
}

... And the code for the ReportServerProxy which takes care of the cookie...

public class ReportServerProxy : ReportingService
{
protected override WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest request;
request = (HttpWebRequest)HttpWebRequest.Create(uri);

// Create a cookie jar to hold the request cookie
CookieContainer cookieJar = new CookieContainer();
request.CookieContainer = cookieJar;
Cookie authCookie = AuthCookie;

// if the client already has an auth cookie
// place it in the request's cookie container
if (authCookie != null) request.CookieContainer.Add(authCookie);

request.Timeout = -1;
request.Headers.Add("Accept-Language", HttpContext.Current.Request.Headers["Accept-Language"]);
return request;
}

protected override WebResponse GetWebResponse(WebRequest request)
{
WebResponse response = base.GetWebResponse(request);
string cookieName = response.Headers["RSAuthenticationHeader"];

// If the response contains an auth header, store the cookie
if (cookieName != null)
{
Utilities.CustomAuthCookieName = cookieName;
HttpWebResponse webResponse = (HttpWebResponse)response;
Cookie authCookie = webResponse.Cookies[cookieName];

// If the auth cookie is null, throw an exception
if (authCookie == null)
{
throw new Exception("Authorization ticket not received by LogonUser");
}

// otherwise save it for this request
AuthCookie = authCookie;

// and send it to the client
Utilities.RelayCookieToClient(authCookie);
}
return response;
}

private Cookie AuthCookie
{
get
{
if (m_Authcookie == null)
m_Authcookie = Utilities.TranslateCookie(
HttpContext.Current.Request.Cookies[Utilities.CustomAuthCookieName]);
return m_Authcookie;
}
set
{
m_Authcookie = value;
}
}
private Cookie m_Authcookie = null;
}

... And the code for the Utilities class...

internal sealed class Utilities
{
internal static string CustomAuthCookieName
{
get
{
lock (m_cookieNamelockRoot)
{
return m_cookieName;
}
}
set
{
lock (m_cookieNamelockRoot)
{
m_cookieName = value;
}
}
}

private static string m_cookieName;
private static object m_cookieNamelockRoot = new object();

private static HttpCookie TranslateCookie(Cookie netCookie)
{
if (netCookie == null) return null;

HttpCookie webCookie = new HttpCookie(netCookie.Name, netCookie.Value);

// Add domain only if it is dotted - IE doesn't send back the cookie
// if we set the domain otherwise
if (netCookie.Domain.IndexOf('.') != -1)
webCookie.Domain = netCookie.Domain;

webCookie.Expires = netCookie.Expires;
webCookie.Path = netCookie.Path;
webCookie.Secure = netCookie.Secure;
return webCookie;
}

internal static Cookie TranslateCookie(HttpCookie webCookie)
{
if (webCookie == null) return null;
Cookie netCookie = new Cookie(webCookie.Name, webCookie.Value);

if (webCookie.Domain == null)
netCookie.Domain = HttpContext.Current.Request.ServerVariables["SERVER_NAME"];

netCookie.Expires = webCookie.Expires;
netCookie.Path = webCookie.Path;
netCookie.Secure = webCookie.Secure;
return netCookie;
}

internal static void RelayCookieToClient(Cookie cookie)
{
// add the cookie if not already in there
if (HttpContext.Current.Response.Cookies[cookie.Name] == null)
{
HttpContext.Current.Response.Cookies.Remove(cookie.Name);
}
HttpContext.Current.Response.SetCookie(TranslateCookie(cookie));
}
}

Sorry for the long post with lots of code. I'm not used to posting in forums so I'm not sure what is the best way to do this.

Like I said, this is basically the same code used by the Login.aspx page and it seems to work great there, so I guess it should be alright.

One thing I find kind of strange is the following in the Report Manger web.config:

<system.web>
[...]
<authentication mode="Windows" />
<identity impersonate="false" />
[...]
</system.web>

The step by step guide didn't ask to change it but should'nt this be mode="Forms"?

Thanks again, your support is really appreciated.

|||

Have you tried using hardcoding the url using \\localhost\ instead of machine IP in place of GetWebServiceURL().

string sUrl = "";
try
{
ReportServerProxy server = new ReportServerProxy();
server.Url = /ReportService2005.asmx" href="http://links.10026.com/?link=http://localhost//ReportService2005.asmx">http://localhost/<REPORTSERVER>/ReportService2005.asmx;
server.LogonUser(TxtUser.Text, TxtPwd.Text, null);
passwordVerified = true;
}
catch (Exception ex)
{
return;
}

|||

Hi Ross, thanks for your input.

Previously (a few days ago) GetWebServiceURL() was reading the url in a config file. But since I had problems with that, I modified GetWebServiceURL() to return a hardcoded string. Mine was http://<servername>/<reportserver>/ReportService.asmx instead of your http://localhost/<REPORTSERVER>/ReportService2005.asmx. So I decided to try yours but if anything, it is worse, i.e. when I authenticate from UILogon.aspx with my string, I get redirected to the error page:

"The report server is not responding. Verify that the report server is running and can be accessed from this computer"

When I use your string, I get the following exception:

System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: http://schemas.microsoft.com/sqlserver/2003/12/reporting/reportingservices/LogonUser. at System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest() at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message) at System.Web.Services.Protocols.SoapServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)

However, in both cases, if I try to access http://<servername>/Reports$SQLSERVER_2005/, I get the error page...

"The report server is not responding. Verify that the report server is running and can be accessed from this computer"

...instead of being redirected to the UILogon.aspx page (which I find puzzling).

Also, what's the difference between ReportService.asmx and ReportService2005.asmx? I sometimes wonder if this may be the source of my problems. Everywhere in my code, I was using ReportService.asmx.

Thanks

|||

Well it sounds like the web server is listening. However you may be passing a parameter in the HTTP request that does not match what the server is expecting.

I would double check to make sure the interface you are implementing is the one you are targeting.

using Microsoft.SqlServer.ReportingServices.ReportService2005;

....

public class ReportServerProxy : RS.ReportExecutionService

Where RS is a reference to /ReportServer/reportExecution2005.asmx" href="http://links.10026.com/?link=http:///ReportServer/reportExecution2005.asmx">http://<RSSERVER>/ReportServer/reportExecution2005.asmx

|||

Hi again Ross.

I've seen the following post: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=119960&SiteID=1 which answers the ReportService.asmx vs ReportService2005.asmx question. If I undrestand the answer correctly, I should be able to use ReportService.asmx, with a reduced feature set. Perhaps this reduced feature set means I can't use the 2005 version of Report Manager...

If you look at the code I posted, you'll see that I wasn't refering to ReportService2005 (in ReportService2005.asmx) but ReportService (in ReportService.asmx). Also, my proxy wasn't extending you RS.ReportExecutionService but the ReportingService class. So the exception is expected, in a way.

I'll try to rework my implementation using ReportService2005.asmx to see if I have any more luck and I'll let you know. I hope I don't have to change too many things as most of the code wasn't written by me, it was taken from a tutorial online.

|||

Hi Nicolas,

I'm a little bit past the issue you're having. I struggled with it a long......... time. As long as I run Report Server and Report Manager on the same machine things are fine with my custom security extension. The key in my case was to use the full machine.domain.com name everywhere. By everywhere I mean in both web.config files, the RSWebApplication.config file for ReportManager and the RSReportServer.config file on report server. Finally, in your browser always refrence the report manager url with the full machine.domain.com url never just 'machine' and certainly not with just localhost. I don't have the instance names as part of my VDirs but otherwise things are setup pretty similar to yours.

The problem I'm currently having is I'm trying to run ReportManager on a different box than ReportServer I get the exact same exception messages that you're seeing.

If anyone can verify that its possible to run ReportManager and ReportServer on different machines with a custom security extension I'd love to hear about it. I've also got a support call open with Microsoft and we're working the issue. I'll let the forum know how it turns out.....

cheers
Perry

|||

Hi Perry,

Thanks for your input.

In my case, I don't have a "machine.domain.com" (or if I do, i don't know what it is). This is a developpement server in an intranet. However, I do use the servername "everywhere" (i.e. in the config files and in the way I type my url in my browser). I think the key is just to be consistent in how you address it. Otherwise, I guess I could type in the IP address everywhere.

When you say your setup is similar to mine, do you mean my current setup (using "ReportService.asmx") or the one I was about to convert to (using "ReportService2005.asmx)?

As for running the services from different servers, have you seen the post below? You may find some clues in there...

http://groups.google.ca/group/microsoft.public.sqlserver.reportingsvcs/browse_frm/thread/991c9178ceab8f58/8f1a447aa60ad837?lnk=st&q=reporting+services+the+server+is+not+responding&rnum=3&hl=en#8f1a447aa60ad837

Thanks again

|||

Nicolas,

Did you ever work past your issue? I'm having an issue with a custom security extension that is a little different but related to cookies being passed from Report Manager to Reporting Services and I found your post. I'm curious if your problem was solved and if the solution would help me in any way.

Thanks,

Kyle

|||

Hi Kyle,

I haven't spent more time on the issue since my last post as other matters required my attention. However, I do plan to revisit the issue in the near future. If I do manage to make it work, I'll post here. If you have any solution hints on your side, these would be appreciated as well.

Cheers,

Nicolas

|||

Hey Nicolas,

I'm not 100% working but finally did find the major hang up I was having. Turns out it's a bug in how cookies are passed by controls in Report Manager. Namely when trying to view a report the custom authentication cookie is not passed to the Report Server.

Check this KB article just in case you're getting this error. The patch was free to get from support and it should be in the next service pack. If you get back to this and you're still stuck let me know. I know more about custom extensions then I ever planned on knowing at this point. :)

Happy Coding!

Kyle

www.kylefinley.net

RS2005: Navigation to NEW Browser Window

Hello,
we want a new browser window to open if we click on a report element with a
hyperlink-action. A second report should be displayed in the new browser
window at the same time. Is this possible?
Regards,
RalphIn the field you want to link, go to the action property. Select jump
to URL and enter an expression like the following:
="javascript:void(window.open('http://www.google.com','_blank'))"
Where the http://www.google.com is where you should put the link to
your report. If you have parameters, you will have to modify the query
string to include the parameters & their values (by programatically
concatenating them).
If you do a search through these forums for "javascript new window"
(without quotes) you should get many samples on how to accomplish some
of this.
Good Luck.
Regards,
Dan

RS2005: Export to Excel error: Destination array was not long enough. Check destIndex and length

All,

I am using Reporting Services 2005. One of my reports is getting the following error when I try to export to Excel. It will export to .CSV though.

"Destination array was not long enough. Check destIndex and length, and the array's lower bounds."

Any suggestions would be greatly appreciated. Please copy me at machelle.a.chandler@.intel.com.

Machelle

What is the length of the longest string in the cells that you are trying to export?

Here is another description of similar bug:

http://dev.devbiz.com/forums/thread/1500.aspx

Seems as though the description in their case is too long to export.

|||I have exactly the same problem you mentioned Machelle. I guess it is because there is a certain limit for the data amaount in an Excel cell. Not the Excel cell itself but the buffer related to it. Exporting occassionally works when there is no cell with large amount of data.

I could not find a solution though. Any suggestion is appreciated.

EKREM

RS2005: Export to Excel error: Destination array was not long enough. Check destIndex and length

All,

I am using Reporting Services 2005. One of my reports is getting the following error when I try to export to Excel. It will export to .CSV though.

"Destination array was not long enough. Check destIndex and length, and the array's lower bounds."

Any suggestions would be greatly appreciated. Please copy me at machelle.a.chandler@.intel.com.

Machelle

What is the length of the longest string in the cells that you are trying to export?

Here is another description of similar bug:

http://dev.devbiz.com/forums/thread/1500.aspx

Seems as though the description in their case is too long to export.

|||I have exactly the same problem you mentioned Machelle. I guess it is because there is a certain limit for the data amaount in an Excel cell. Not the Excel cell itself but the buffer related to it. Exporting occassionally works when there is no cell with large amount of data.

I could not find a solution though. Any suggestion is appreciated.

EKREM

RS2005: Export to Excel error: Destination array was not long enough. Check destIndex and le

All,

I am using Reporting Services 2005. One of my reports is getting the following error when I try to export to Excel. It will export to .CSV though.

"Destination array was not long enough. Check destIndex and length, and the array's lower bounds."

Any suggestions would be greatly appreciated. Please copy me at machelle.a.chandler@.intel.com.

Machelle

What is the length of the longest string in the cells that you are trying to export?

Here is another description of similar bug:

http://dev.devbiz.com/forums/thread/1500.aspx

Seems as though the description in their case is too long to export.

|||I have exactly the same problem you mentioned Machelle. I guess it is because there is a certain limit for the data amaount in an Excel cell. Not the Excel cell itself but the buffer related to it. Exporting occassionally works when there is no cell with large amount of data.

I could not find a solution though. Any suggestion is appreciated.

EKREM

RS2005: Excel huge file size

I have an issue with exporting RS2005 reports to Excel:
1) The exported fie size is disproportional to the rowset size - ~7000
records weigh 45 MB, whilst a CSV version of the same report weighs 7MB.
2) RS exports to Excel with a redundant blank A column on the left and 4
rows that hold the report caption. Is there anyway to configure RS not to
export with these rows and columns, so it'll start directly with my data?
We have SSRS Version 9.00.1399.00 with SQL Server 2000 - 8.00.818Offirh wrote:
> I have an issue with exporting RS2005 reports to Excel:
> 1) The exported fie size is disproportional to the rowset size - ~7000
> records weigh 45 MB, whilst a CSV version of the same report weighs 7MB.
> 2) RS exports to Excel with a redundant blank A column on the left and 4
> rows that hold the report caption. Is there anyway to configure RS not to
> export with these rows and columns, so it'll start directly with my data?
> We have SSRS Version 9.00.1399.00 with SQL Server 2000 - 8.00.818
The best way to minimize file size when exporting to excel is to remove
as much formatting from the report design as possible. Remove any
borders, colors, etc. Still, SSRS will apply some formatting to the
resulting export and make it very difficult to match the more efficient
CSV export, (which is your best workaround IMO).
Ghost columns can be very difficult to remove completely, however,
paying attention to the left and right boundaries of your controls in
relation to other controls on your report can help.
For example, if you have a textbox at the top of your report holding a
report title, and then a table beneath which contains detail records,
making sure that the left and right sides of the textbox control align
vertically with the table control, or column boundaries in the table
control will minimize the occurrence of Ghost columns in the excel
export.
Basically, SSRS seems to evaluate each control boundary, and will
define all columns necessary to bound each control's right and left
side, (often merging columns as well which makes things a real mess
when you try to sort data in the spreadsheet).
SoftArtisans has a nice product call OfficeWriter that helps eliminate
the problem altogether. OfficeWriter allows you to define DataSets in
SSRS, and then use Excel to define where you want the data from the
datasets to land. This bypasses SSRS doing the formatting of the Excel
spreadsheet, which results in several desirable outcomes:
1) The memory drawdown on your SSRS box is drastically reduced when
the report is being run. Excel exports take a lot of memory to
complete!
2) The resulting file size is reduced because none of the formatting
codes are generated by SSRS which balloon the excel file size.
3) You bypass all the other formatting problems with merged
columns/rows
4) You get to use all the native Excel functionality in the resulting
report, including custom macros, etc.
But, it's not free!
Philip|||One other design point. You should not use textboxes at all. If you have a
textbox at the top of your report and then a table the user will not be able
to sort the data because of merged columns issue in Excel. I add extra
header rows to my table and put the report title there.
Bruce Loehle-Conger
MVP SQL Server Reporting Services
"PhilipL" <pal@.philiplee.com> wrote in message
news:1158092129.378116.36300@.b28g2000cwb.googlegroups.com...
> Offirh wrote:
>> I have an issue with exporting RS2005 reports to Excel:
>> 1) The exported fie size is disproportional to the rowset size - ~7000
>> records weigh 45 MB, whilst a CSV version of the same report weighs 7MB.
>> 2) RS exports to Excel with a redundant blank A column on the left and 4
>> rows that hold the report caption. Is there anyway to configure RS not to
>> export with these rows and columns, so it'll start directly with my data?
>> We have SSRS Version 9.00.1399.00 with SQL Server 2000 - 8.00.818
> The best way to minimize file size when exporting to excel is to remove
> as much formatting from the report design as possible. Remove any
> borders, colors, etc. Still, SSRS will apply some formatting to the
> resulting export and make it very difficult to match the more efficient
> CSV export, (which is your best workaround IMO).
> Ghost columns can be very difficult to remove completely, however,
> paying attention to the left and right boundaries of your controls in
> relation to other controls on your report can help.
> For example, if you have a textbox at the top of your report holding a
> report title, and then a table beneath which contains detail records,
> making sure that the left and right sides of the textbox control align
> vertically with the table control, or column boundaries in the table
> control will minimize the occurrence of Ghost columns in the excel
> export.
> Basically, SSRS seems to evaluate each control boundary, and will
> define all columns necessary to bound each control's right and left
> side, (often merging columns as well which makes things a real mess
> when you try to sort data in the spreadsheet).
> SoftArtisans has a nice product call OfficeWriter that helps eliminate
> the problem altogether. OfficeWriter allows you to define DataSets in
> SSRS, and then use Excel to define where you want the data from the
> datasets to land. This bypasses SSRS doing the formatting of the Excel
> spreadsheet, which results in several desirable outcomes:
> 1) The memory drawdown on your SSRS box is drastically reduced when
> the report is being run. Excel exports take a lot of memory to
> complete!
> 2) The resulting file size is reduced because none of the formatting
> codes are generated by SSRS which balloon the excel file size.
> 3) You bypass all the other formatting problems with merged
> columns/rows
> 4) You get to use all the native Excel functionality in the resulting
> report, including custom macros, etc.
> But, it's not free!
> Philip
>sql

RS2005: Datetime-Parameter-Problem, only(!) on server

Hello,
we are facing a datetime-parameter-problem, that does not occur during
preview but when the report is deployed to the server:
We have the following situation:
Report A:
Parameter: Date (Datetime with picker), some other string parameters
Report B:
Parameter: Date (Datetime with picker), some other string parameters
Now wie navigate from some table field from ReportA to ReportB with the
following parameter-mapping:
Date=Parameters!Date.Value
In the preview and the local debug, everything works fine, but as soon as
the reports are executed on the server, day and month are swapped!
On the client there is a german WindowsXP and on the server an english
WindowsXP. What is the problem and what can we do?
Regards,
RalphCan you change the client from German to English? It sure sounds like
that's your problem. If you can't, then you'll need to find a way to
format your date in the English-US (mmddyyy) instead of (ddmmyyyy).|||Hi tool man,
many thanks for your reply.
The problem is that I can't tell in advance if the server system, the sql
server 2005 on the system are german or english, and we have definitely
clients with different language settings and different browsers in different
languages...
Any ideas? Many thanks in advance,
Ralph
"toolman" <timd@.infocision.com> schrieb im Newsbeitrag
news:1142441749.516338.297680@.u72g2000cwu.googlegroups.com...
> Can you change the client from German to English? It sure sounds like
> that's your problem. If you can't, then you'll need to find a way to
> format your date in the English-US (mmddyyy) instead of (ddmmyyyy).
>

RS2005 Web ReportViewer: Unable to set parameters and ReportServerCredentials

Hey guys,
I'm using the report viewer web control in my web application. I got it
somewhat working but now I'm stuck:
1) I can't set the parameters for the report. When I call SetParameters and
pass a ReportParameter array, it complains that this report doesn't have
parameter 'XYZ'. But in reality it does. My suspicion was that the
ServerReport object is not filled with report data yet.
So I called GetParameters beforehand to see if it would initialize the
parameters collection. Then I found out that the parameters collection is
set to read-only, which means I can't set parameter values in an initialized
parameter collection.
Last try was to call SetParameters after calling GetParameters but I got the
same exception as when calling w/o GetParameters.
2) I need to pass ReportServerCredentials to RS because of course ASPNET
does not have access rights to RS. The only property that is not read-only
underneath the ReportServerCredentials property is the
ReportServerCredentials itself, which is of type IReportServerCredentials.
So far I couldn't find any credentials object that implements this
interface.
Anybody any idea?
Thanks, ChristophI have the same problem, did anyone ever respond to you?
"Christoph Wienands" wrote:
> Hey guys,
> I'm using the report viewer web control in my web application. I got it
> somewhat working but now I'm stuck:
> 1) I can't set the parameters for the report. When I call SetParameters and
> pass a ReportParameter array, it complains that this report doesn't have
> parameter 'XYZ'. But in reality it does. My suspicion was that the
> ServerReport object is not filled with report data yet.
> So I called GetParameters beforehand to see if it would initialize the
> parameters collection. Then I found out that the parameters collection is
> set to read-only, which means I can't set parameter values in an initialized
> parameter collection.
> Last try was to call SetParameters after calling GetParameters but I got the
> same exception as when calling w/o GetParameters.
> 2) I need to pass ReportServerCredentials to RS because of course ASPNET
> does not have access rights to RS. The only property that is not read-only
> underneath the ReportServerCredentials property is the
> ReportServerCredentials itself, which is of type IReportServerCredentials.
> So far I couldn't find any credentials object that implements this
> interface.
> Anybody any idea?
> Thanks, Christoph
>
>

RS2005 web reference produces "C2234: Array of References illegal"

Hello,
I'm new to RS2005 and have begun going through the Tutorials in SQLServer 2005 Books Online. I'm currently attempting to add "reportingservices2005.asmx" as a web reference to my VS2003 C#.NET project and I keep getting this compile time error:

error C2234: 'Warnings' : arrays of references are illegal

How do I get rid of this compile time error? This error appears in the generated file representing the RS2005.wsdl. Aside from the generated web reference files the other files of the VS2003 C#.NET project are the default project files by the wizard.

Thanks in advance for the help
ZeroVerticalUpgrading to VS2005 C#.NET got rid of the error. I must have overlooked this requirement. I just upgraded to VS2005 C#.NET and everything works fine now.|||It shouldn't really be a requirement. Not sure why it is happening. You should file a bug on the feedback center.

RS2005 visual studio design tool

RS2005 ships with a version of visual studio 2005 for report development.
What if I have visual studio 2005 on my local machine. How can I add the
rs2005 shell locally? Are they any license issues?
ThanksI found that if I install VS 2005 after the report designer I lost the
report designer. My suggestion is to first install VS 2005. Then using the
setup for SQL Server 2005 install the Reporting Services client tools (i.e.
the report designer). This will cause the designer to be installed and
integrated with the VS that you already have installed.
Bruce Loehle-Conger
MVP SQL Server Reporting Services
"tcs" <tcs@.discussions.microsoft.com> wrote in message
news:AB535062-7477-4798-8027-AC82209C7A1C@.microsoft.com...
> RS2005 ships with a version of visual studio 2005 for report development.
> What if I have visual studio 2005 on my local machine. How can I add the
> rs2005 shell locally? Are they any license issues?
> Thanks|||Fortunatly, I had VS installed already so did not come across this issue.
After installing sql, the report projects are right there in VS and work
well. Damn fine work on this RS stuff - hat off to MS.
--
William Stacey [MVP]
"Bruce L-C [MVP]" <bruce_lcNOSPAM@.hotmail.com> wrote in message
news:eFLBnAGAGHA.140@.TK2MSFTNGP12.phx.gbl...
>I found that if I install VS 2005 after the report designer I lost the
>report designer. My suggestion is to first install VS 2005. Then using the
>setup for SQL Server 2005 install the Reporting Services client tools (i.e.
>the report designer). This will cause the designer to be installed and
>integrated with the VS that you already have installed.
>
> --
> Bruce Loehle-Conger
> MVP SQL Server Reporting Services
> "tcs" <tcs@.discussions.microsoft.com> wrote in message
> news:AB535062-7477-4798-8027-AC82209C7A1C@.microsoft.com...
>> RS2005 ships with a version of visual studio 2005 for report development.
>> What if I have visual studio 2005 on my local machine. How can I add the
>> rs2005 shell locally? Are they any license issues?
>> Thanks
>|||Thanks to you both
"William Stacey [MVP]" wrote:
> Fortunatly, I had VS installed already so did not come across this issue.
> After installing sql, the report projects are right there in VS and work
> well. Damn fine work on this RS stuff - hat off to MS.
> --
> William Stacey [MVP]
> "Bruce L-C [MVP]" <bruce_lcNOSPAM@.hotmail.com> wrote in message
> news:eFLBnAGAGHA.140@.TK2MSFTNGP12.phx.gbl...
> >I found that if I install VS 2005 after the report designer I lost the
> >report designer. My suggestion is to first install VS 2005. Then using the
> >setup for SQL Server 2005 install the Reporting Services client tools (i.e.
> >the report designer). This will cause the designer to be installed and
> >integrated with the VS that you already have installed.
> >
> >
> > --
> > Bruce Loehle-Conger
> > MVP SQL Server Reporting Services
> >
> > "tcs" <tcs@.discussions.microsoft.com> wrote in message
> > news:AB535062-7477-4798-8027-AC82209C7A1C@.microsoft.com...
> >> RS2005 ships with a version of visual studio 2005 for report development.
> >> What if I have visual studio 2005 on my local machine. How can I add the
> >> rs2005 shell locally? Are they any license issues?
> >>
> >> Thanks
> >
> >
>
>

RS2005 viewer control connection problem.

I am using the reporting services reportviewer control from Visual Studio®
2005 Beta 2.
When I run a repmote report I get the following error:
[WebException: The request was aborted: The connection was closed
unexpectedly.]
I can access the report from my browser doing a straight url access.
I am using RS2005 (did not install anything other than that from SQLServer
2005 cd) on Windows 2003 server, and a SQLserver 2000 back end on a different
machine for RS engine.
The report data source is on the same SQL server machine as the RS database.
can anyone explain what is happening.
Thanks Fred
--
FredI'm having the same problem here.
VS 2005 Beta 2, SQL 2005 April CTP.
Have you found what was causing the problem?
Anderson
Fred escreveu:
> I am using the reporting services reportviewer control from Visual Studio==AE
> 2005 Beta 2.
> When I run a repmote report I get the following error:
> [WebException: The request was aborted: The connection was closed
> unexpectedly.]
> I can access the report from my browser doing a straight url access.
> I am using RS2005 (did not install anything other than that from SQLServer
> 2005 cd) on Windows 2003 server, and a SQLserver 2000 back end on a diffe=rent
> machine for RS engine.
> The report data source is on the same SQL server machine as the RS databa=se.
> can anyone explain what is happening.
> > Thanks Fred
> > > > > > > -- > Fred|||No,
due to other we may actually not user RS2005 anyway, so not such a burnig
issue for the moment.
I still would like to know what's going on though.
I'm using SQLServer 2000 as the RS backend, the datasource is on the same
machine as SQL2000. RS sits on its own machine.
--
Fred
"Anderson dos Santos Pimentel" wrote:
> I'm having the same problem here.
> VS 2005 Beta 2, SQL 2005 April CTP.
> Have you found what was causing the problem?
>
> Anderson
>
> Fred escreveu:
> > I am using the reporting services reportviewer control from Visual Studio®
> > 2005 Beta 2.
> >
> > When I run a repmote report I get the following error:
> >
> > [WebException: The request was aborted: The connection was closed
> > unexpectedly.]
> >
> > I can access the report from my browser doing a straight url access.
> >
> > I am using RS2005 (did not install anything other than that from SQLServer
> > 2005 cd) on Windows 2003 server, and a SQLserver 2000 back end on a different
> > machine for RS engine.
> >
> > The report data source is on the same SQL server machine as the RS database.
> >
> > can anyone explain what is happening.
> >
> > Thanks Fred
> >
> >
> >
> >
> >
> >
> > --
> > Fred
>|||I've finally found the problem.
I was dumb enough to mistype the server's name... :-)
Now, it's OK!
Andersonsql

RS2005 Testing

I've creating a bunch of straight-forward and useful reports. Everybody that
sees them loves them.
The problem is that now they want to deploy these reports to production. My
testing has been to run them a few times and look at the results.
Most of these reports take a couple of ints as input parameters, and print
out a table with some date and page info in the header and footer. The data
query is simple t-sql in a stored procedure.
Any thoughts or pointers on how to automate testing for simple RS2005
Reporting Services reports?
Thanks,
--
RandyHello Randy,
I would like to make this issue more clear.
What do you mean to automate test the RS 2005 report?
Do you want to use a program to test whether the reports on the Report
server is working fine?
If so, you could use the Reporing services web service to render the report
on the server and test whether they are working fine.
Please let me know the detailed information of your automate testing. Thank
you!
Sincerely,
Wei Lu
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.
Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================(This posting is provided "AS IS", with no warranties, and confers no
rights.)|||I'm wondering if there's a way to programmatically read values from a table
in a Reporting Services report?
Seems like my alternative is to simply read the results of the stored
procedure that provides data to the report, and test the results against
known values. My problem with that is I'm only testing the stored procedure,
not the report at all.
If I could programmatically read from the report and compare values for a
given set of input parameters, I'm testing the stored procedure and the
report.
--
Randy
"Wei Lu [MSFT]" wrote:
> Hello Randy,
> I would like to make this issue more clear.
> What do you mean to automate test the RS 2005 report?
> Do you want to use a program to test whether the reports on the Report
> server is working fine?
> If so, you could use the Reporing services web service to render the report
> on the server and test whether they are working fine.
> Please let me know the detailed information of your automate testing. Thank
> you!
> Sincerely,
> Wei Lu
> Microsoft Online Community Support
> ==================================================> Get notification to my posts through email? Please refer to
> http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
> ications.
> Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
> where an initial response from the community or a Microsoft Support
> Engineer within 1 business day is acceptable. Please note that each follow
> up response may take approximately 2 business days as the support
> professional working with you may need further investigation to reach the
> most efficient resolution. The offering is not appropriate for situations
> that require urgent, real-time or phone-based interactions or complex
> project analysis and dump analysis issues. Issues of this nature are best
> handled working with a dedicated Microsoft Support Engineer by contacting
> Microsoft Customer Support Services (CSS) at
> http://msdn.microsoft.com/subscriptions/support/default.aspx.
> ==================================================> (This posting is provided "AS IS", with no warranties, and confers no
> rights.)
>|||Hello Randy,
Are the input parameters all the report parameters? If so, you could use
the Report Services Web Services to execute the report with given
parameters.
For more information, please refer the Reporting Services Web Services
Class Library
http://msdn2.microsoft.com/en-us/library/ms159717.aspx
Sincerely,
Wei Lu
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.
Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================(This posting is provided "AS IS", with no warranties, and confers no
rights.)|||Using Reporting Services Web Service to execute the report sounds great! Any
suggestions on how to read the data in the report, to compare it to expected
values?
Thanks,
--
Randy
"Wei Lu [MSFT]" wrote:
> Hello Randy,
> Are the input parameters all the report parameters? If so, you could use
> the Report Services Web Services to execute the report with given
> parameters.
> For more information, please refer the Reporting Services Web Services
> Class Library
> http://msdn2.microsoft.com/en-us/library/ms159717.aspx
> Sincerely,
> Wei Lu
> Microsoft Online Community Support
> ==================================================> Get notification to my posts through email? Please refer to
> http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
> ications.
> Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
> where an initial response from the community or a Microsoft Support
> Engineer within 1 business day is acceptable. Please note that each follow
> up response may take approximately 2 business days as the support
> professional working with you may need further investigation to reach the
> most efficient resolution. The offering is not appropriate for situations
> that require urgent, real-time or phone-based interactions or complex
> project analysis and dump analysis issues. Issues of this nature are best
> handled working with a dedicated Microsoft Support Engineer by contacting
> Microsoft Customer Support Services (CSS) at
> http://msdn.microsoft.com/subscriptions/support/default.aspx.
> ==================================================> (This posting is provided "AS IS", with no warranties, and confers no
> rights.)
>|||We have reports with about 4 nested parameters. We created a test app that
uses the soap api to query the report parameters and builds an array with
all possible parameter combinations. We then run these reports, we render
them to pdf format and use pdfbox to prepend a page count to the file name.
We also script out the parameters so we don't have to go through the
overhead of calculating all the combinations for subsequent testing runs.
We output error messages that capture parameter combinations that result in
reports that won't run. We spot check data, the page number thing helps us
with finding matrix controls that spill over to two page widths. We also
open the files and look for text overlap, that kind of thing. We were also
outputing to...? I think text...or something like that and searching for
'Error', but I haven't been doing that lately.
example RunReports.rss:
Dim ParentrentPath As String = "/" + ReportDir
Public Sub Main()
RunReport("foo", "c:\temp\reports\9~5~2006 5~54~41
PM\foo\pdf\foo__38.pdf", "fooID", "38")
RunReport("foo", "c:\temp\reports\9~5~2006 5~54~41
PM\foo\pdf\foo__857.pdf", "fooID", "857")
End Sub
Public Sub RunReport(ByVal reportName As String, ByVal ParamNames As String,
ByVal ParamValues As String)
Dim objReportResult As Byte()
Dim encoding As String
Dim mimeType As String
Dim rptParamsUsed As ParameterValue()
Dim warnings As Warning()
Dim streamIDs As String()
Dim fs As FileStream
Dim Names As String()
Dim Values As String()
Dim rptParamValues As ParameterValue()
Dim Counter As Integer
If ParamNames Is Nothing Then
rptParamValues = Nothing
Else
Names = ParamNames.Split(", ")
Values = ParamValues.Split(", ")
ReDim rptParamValues(Names.Length - 1)
For Counter = 0 To Names.Length - 1
rptParamValues(Counter) = New ParameterValue()
rptParamValues(Counter).Name = Names(Counter)
rptParamValues(Counter).Value = Values(Counter)
Counter = Counter + 1
Next Counter
End If
Try
objReportResult = rs.Render(ParentPath + "/" + reportName, "PDF",
Nothing, Nothing, rptParamValues, Nothing, Nothing, encoding, mimeType,
rptParamsUsed, warnings, streamIDs)
fs = new FileStream("C:\temp\" + reportName + ".pdf",
FileMode.OpenOrCreate)
fs.Write(objReportResult, 0, objReportResult.Length)
fs.Close()
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub
RunReports.cmd
@.echo off
REM ==============================================REM SET Variables
REM ==============================================set rscmd=rs.exe
set rssfile=.\RunReports.rss
set rspath=\Program Files\Microsoft SQL Server\90\Tools\Binn\
set rssubdir=%6
set rssparams=-i %rssfile% -s %1 -v filePath=".\\" -v
ReportDir=%rssubdir% -v RSDBServer=%2 -v DataDB=%3 -v DataDBUser=%4 -v
DataDBPwd="%5" -v RSDSName=%7
%rscmd% %rssparams%
Then we use wrapper command files for the different environment...dev, qa
REM --Parameters--
REM 1: RS server
REM 2: datasource db server
REM 3: datasource db name
REM 4: datasource db login
REM 5: datasource db password
REM 6: rs folder
REM 7: rs datasource name
RunReports.cmd blah, blah, blah
Steve MunLeeuw
"randy1200" <randy1200@.newsgroups.nospam> wrote in message
news:6FA66166-9C18-4A51-A6FB-34F0746F3AF6@.microsoft.com...
> I've creating a bunch of straight-forward and useful reports. Everybody
> that
> sees them loves them.
> The problem is that now they want to deploy these reports to production.
> My
> testing has been to run them a few times and look at the results.
> Most of these reports take a couple of ints as input parameters, and print
> out a table with some date and page info in the header and footer. The
> data
> query is simple t-sql in a stored procedure.
> Any thoughts or pointers on how to automate testing for simple RS2005
> Reporting Services reports?
> Thanks,
> --
> Randy|||Hi Randy,
I think you could render to the CSV format so that you could read the text
content of the report and compare the result to the expected one.
Have you tried the solution that Steve MunLeeuw provided? His suggestion
sounds great.
Sincerely,
Wei Lu
Microsoft Online Community Support|||Hello Randy,
I would like to know the status of this issue. If you have any questions,
please feel free to let me know.
Sincerely,
Wei Lu
Microsoft Online Community Support|||Hi Steve,
I too am attempting to render reports using the "rs" utility with the
following code;
=== Begin code===== Public Sub Main()
' Render arguments
Dim result As Byte() = Nothing
Dim reportPath As String = "/Financial Reports/Flash/Flash Report"
Dim format As String = "EXCEL"
Dim historyID As String = Nothing
Dim devInfo As String =
"<DeviceInfo><OmitDocumentMap>false</OmitDocumentMap><OmitFormulas>false</OmitFormulas><RemoveSpace>0.125in</RemoveSpace><SimplePageHeaders>false</SimplePage
Headers></DeviceInfo>"
' Prepare report parameter.
Dim rptParamsUsed As ParameterValue
Dim parameters(4) As ParameterValue
parameters(0) = New ParameterValue()
parameters(0).Name = "CalendarsCalendars"
parameters(0).Value = "[Calendars].[Calendars].[Week
Number].&[200615]"
parameters(1) = New ParameterValue()
parameters(1).Name = "ProfitCenterRollupsProfitCenterRollups"
parameters(1).Value = "[Profit Center Rollups].[Profit Center
Rollups].[Enterprise].&[CIBER Departments].[Custom Solutions
Consolidated].[East
Region].[Atlanta]"
parameters(2) = New ParameterValue()
parameters(2).Name = "BookedDatesBookedDates"
parameters(2).Value = "[Booked Dates].[Booked Dates].[All Booked
Dates]"
parameters(3) = New ParameterValue()
parameters(3).Name = "CurrenciesCurrencies"
parameters(3).Value ="[Currencies].[Currencies].[Country].&[USA].&[US Dollar]"
Dim credentials As DataSourceCredentials() = Nothing
Dim showHideToggle As String = Nothing
Dim encoding As String = ""
Dim mimeType As String = ""
Dim warnings As Warning() = Nothing
Dim reportHistoryParameters As ParameterValue() = Nothing
Dim streamIDs As String() = Nothing
Dim extension As String = ""
Try
result = rs.Render(format, devInfo , extension, encoding,
mimeType, warnings, streamIDs)
Catch e As SoapException
Console.WriteLine(e.Detail.OuterXml)
End Try
Try
Dim stream As FileStream
stream = new FileStream("report.xls", FileMode.OpenOrCreate)
Console.WriteLine("File created.")
stream.Write(result, 0, result.Length)
Console.WriteLine("Result written to the file.")
stream.Close()
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub 'Main
===End code===On executing this from the command line with the following command:
rs -i a1.rss -s http://cdc-dwwebd1/reportserver_dev -e Exec2005
I get the the following error:
===Error mesage (start)====C:\Documents and Settings\AGopalan\My Documents\Junk>rs -i a1.rss -s
http://cdc-dwwebd1/reportserver_dev -e Exec2005
<detail><ErrorCode
xmlns="rsMissingSessionId</ErrorCode><HttpStatus">http://www.microsoft.com/sql/reportingservices">rsMissingSessionId</ErrorCode><HttpStatus
xmlns="400</HttpStatus><Message">http://www.microsoft.com/sql/reportingservices">400</HttpStatus><Message
xmlns="The">http://www.microsoft.com/sql/reportingservices">The session identifier
is mis
sing. A session identifier is required for this operation.
</Message><HelpLink
xmlns="http:/">http://www.microsoft.com/sql/reportingservices">http:/
/go.microsoft.com/fwlink/?LinkId=20476&EvtSrc=Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&EvtID=rsMissingSessionI
d&ProdName=Microsoft%20SQL%20Server%20Reporting%20Services&ProdVer=9.00.3159.00</HelpLink><ProductName xmlns="http://www.microsoft.c
om/sql/reportingservices">Microsoft SQL Server Reporting
Services</ProductName><ProductVersion
xmlns="http://www.microsoft.com/sql/reporting
services">9.00.3159.00</ProductVersion><ProductLocaleId
xmlns="127</ProductLocaleId><Operati">http://www.microsoft.com/sql/reportingservices">127</ProductLocaleId><Operati
ngSystem
xmlns="OsIndependent</OperatingSystem><CountryLocaleId">http://www.microsoft.com/sql/reportingservices">OsIndependent</OperatingSystem><CountryLocaleId xmlns="http://www.microsoft.
com/sql/reportingservices">1033</CountryLocaleId><MoreInformation
xmlns="<Source>ReportingSe">http://www.microsoft.com/sql/reportingservices"><Source>ReportingSe
rvicesWebServer</Source><Message msrs:ErrorCode="rsMissingSessionId"
msrs:HelpLink="http://go.microsoft.com/fwlink/?LinkId=20476&EvtSrc=
Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&EvtID=rsMissingSessionId&ProdName=Microsoft%20SQL%20Server%20Reportin
g%20Services&ProdVer=9.00.3159.00"
xmlns:msrs="The">http://www.microsoft.com/sql/reportingservices">The session
identifier is missing. A sess
ion identifier is required for this operation.
</Message></MoreInformation><Warnings
xmlns="http://www.microsoft.com/sql/reportingservices"
/></detail>
File created.
Object reference not set to an instance of an object.
The command completed successfully
===Error mesage (end)====
I am at a loss at to what the error is. It seems to 'cry' about a missing
session id.
Any help is greatly appreciated.
--
ashok
"Steve MunLeeuw" wrote:
> We have reports with about 4 nested parameters. We created a test app that
> uses the soap api to query the report parameters and builds an array with
> all possible parameter combinations. We then run these reports, we render
> them to pdf format and use pdfbox to prepend a page count to the file name.
> We also script out the parameters so we don't have to go through the
> overhead of calculating all the combinations for subsequent testing runs.
> We output error messages that capture parameter combinations that result in
> reports that won't run. We spot check data, the page number thing helps us
> with finding matrix controls that spill over to two page widths. We also
> open the files and look for text overlap, that kind of thing. We were also
> outputing to...? I think text...or something like that and searching for
> 'Error', but I haven't been doing that lately.
> example RunReports.rss:
> Dim ParentrentPath As String = "/" + ReportDir
> Public Sub Main()
> RunReport("foo", "c:\temp\reports\9~5~2006 5~54~41
> PM\foo\pdf\foo__38.pdf", "fooID", "38")
> RunReport("foo", "c:\temp\reports\9~5~2006 5~54~41
> PM\foo\pdf\foo__857.pdf", "fooID", "857")
> End Sub
>
> Public Sub RunReport(ByVal reportName As String, ByVal ParamNames As String,
> ByVal ParamValues As String)
> Dim objReportResult As Byte()
> Dim encoding As String
> Dim mimeType As String
> Dim rptParamsUsed As ParameterValue()
> Dim warnings As Warning()
> Dim streamIDs As String()
> Dim fs As FileStream
> Dim Names As String()
> Dim Values As String()
> Dim rptParamValues As ParameterValue()
> Dim Counter As Integer
> If ParamNames Is Nothing Then
> rptParamValues = Nothing
> Else
> Names = ParamNames.Split(", ")
> Values = ParamValues.Split(", ")
> ReDim rptParamValues(Names.Length - 1)
> For Counter = 0 To Names.Length - 1
> rptParamValues(Counter) = New ParameterValue()
> rptParamValues(Counter).Name = Names(Counter)
> rptParamValues(Counter).Value = Values(Counter)
> Counter = Counter + 1
> Next Counter
> End If
>
>
> Try
> objReportResult = rs.Render(ParentPath + "/" + reportName, "PDF",
> Nothing, Nothing, rptParamValues, Nothing, Nothing, encoding, mimeType,
> rptParamsUsed, warnings, streamIDs)
> fs = new FileStream("C:\temp\" + reportName + ".pdf",
> FileMode.OpenOrCreate)
> fs.Write(objReportResult, 0, objReportResult.Length)
> fs.Close()
> Catch e As Exception
> Console.WriteLine(e.Message)
> End Try
> End Sub
> RunReports.cmd
> @.echo off
> REM ==============================================> REM SET Variables
> REM ==============================================> set rscmd=rs.exe
> set rssfile=.\RunReports.rss
> set rspath=\Program Files\Microsoft SQL Server\90\Tools\Binn\
> set rssubdir=%6
> set rssparams=-i %rssfile% -s %1 -v filePath=".\\" -v
> ReportDir=%rssubdir% -v RSDBServer=%2 -v DataDB=%3 -v DataDBUser=%4 -v
> DataDBPwd="%5" -v RSDSName=%7
> %rscmd% %rssparams%
>
> Then we use wrapper command files for the different environment...dev, qa
> REM --Parameters--
> REM 1: RS server
> REM 2: datasource db server
> REM 3: datasource db name
> REM 4: datasource db login
> REM 5: datasource db password
> REM 6: rs folder
> REM 7: rs datasource name
> RunReports.cmd blah, blah, blah
> Steve MunLeeuw
> "randy1200" <randy1200@.newsgroups.nospam> wrote in message
> news:6FA66166-9C18-4A51-A6FB-34F0746F3AF6@.microsoft.com...
> > I've creating a bunch of straight-forward and useful reports. Everybody
> > that
> > sees them loves them.
> >
> > The problem is that now they want to deploy these reports to production.
> > My
> > testing has been to run them a few times and look at the results.
> >
> > Most of these reports take a couple of ints as input parameters, and print
> > out a table with some date and page info in the header and footer. The
> > data
> > query is simple t-sql in a stored procedure.
> >
> > Any thoughts or pointers on how to automate testing for simple RS2005
> > Reporting Services reports?
> >
> > Thanks,
> > --
> > Randy
>
>