Printing Telerik reports using ReportProcessor class - c#

Firstly let me describe my setup.
I have a REST Telerik Reporting service. The service operates with TRDX file (have a requirement to have reports in this template format). I also have a console application, which is periodically started by a windows service. This console application uses ReportProcessor class to print reports directly to a printer.
Now the problem.
ReportProcessor throws an exception when trying to access the reports using UriReportSource, when these report files are hosted in IIS together with the REST Reporting service. Browsing and Anonymous Authentication are enabled on IIS for the Reports folder. The error that's thrown is:
The remote server returned an error: (404) not found.
However reports are printed when TRDX files are located in the same folder as the console application.

Solved my own question by trial and error.
My reports were located in the REST service's subdirectory. So I was trying to set the Uri to the reports URL something like this:
UriReportSource reportSource = new UriReportSource {
Uri = "http://localhost/myTelerikRESTService/Reports/samplereport.trdx"
};
And I was obviously getting 404 error since the request to the that path would be handled by the service.
Trying to specify a physical path (c:\inetpub\wwwroot\myTelerikService\Reports\samplereport.trdx) also ended up in error: something like the path format is not supported.
Finally I've tried this Uri: /inetpub/wwwroot/myTelerikService/Reports/samplereport.trdx, that maps to the physical location.
And it worked!
EDIT:
I really should've read this https://www.w3.org/Addressing/URL/uri-spec.html before working on this issue. Apparently I had no firm understanding of what a URI is! Feeling really dumb now.....

Related

Unable to determine if a file is on a web server because the various methods of determining the directory do not work

I am developing an application in asp.net, vs2015 using c# and the development environment is a Win10Pro machine. I can use any of the various methods to obtain the working directory and see if a particular file exists on the dev pc, but not on the Web Server. I have tried the methods laid out on:
Get current application physical path within Application_Start
All work on the Dev PC, but when used on the Web Server it will not return the working directory. The Server is a 2016 Data server using IIS10. The issue is that the web site I am putting together work fine, except to display GrapeCity ActiveReports reports AR15. The web page containing their web viewer opens just fine and is looking for a report file (MyReport.rdlx). The global.aspx file is pointing to the root directory but when the web viewer opens up, it says File Not Found. I have absolutely no idea and tech support is not sure. Is this an IIS issue that is preventing the code to locate and verify the file is there? Any direction would be much appreciated. This has been very frustrating and time consuming.
AppDomain.CurrentDomain.BaseDirectory does not work, HttpRuntime.AppDomainAppPath does not as well as all the others. The request comes back blank.
string filename = AppDomain.CurrentDomain.BaseDirectory.ToString() +"SPU01_Dates.rdlx";
if (File.Exists(filename))
{
Response.Write("YES");
}
else
{
Response.Write("NO");
Response.Write("</br");
Response.Write(filename);
}
All this just returns nothing.
Thanks.
Try this code
if (File.Exists(Server.MapPath(filename)))
Check if a file exists on the server
In my test, it returned YES and worked well. Did you put "SPU01_Dates.rdlx" file in root folder?
In the development environment, it returned YES, and when I deployed it to IIS, it returned NO. I found that during the deployment process, the rdlx file was not deployed with the project, so I recreated one in the deployed folder, and it returned YES.
The test proves that AppDomain.CurrentDomain.BaseDirectory is the most accurate way to get the file path. When you test this code in IIS, does it return NO or empty? Returning empty means that this piece of code has not been executed.

Failed to load resources

I have application which I deploy to Azure and suddenly I catch one error which wasnt in my local machine when I tested application.
Failed to load resource: the server responded with a status of 404 (Not Found)
SO when I tested application in my local machine everything works perfect without any errors, and when I move to test application live on server many option doesnt work, and in console manager I get this kind of error.
Any help, what can be problem here ?
404 is resource not found error. Most probable reasons are your files are in “../“ folder and you are trying to access file in “../..” folder.
I would suggest using URLs like /Folder/subfolder instead of relative URLs like “../parentfolder/subfolder”..
Also, its good to use “~”..
More on paths here:
https://msdn.microsoft.com/en-us/library/ms178116.aspx

Instantiating .NET Print Server

Final Edit
Apparently I've been barking up the wrong tree.
https://msdn.microsoft.com/en-us/library/system.printing.printsystemjobinfo(v=vs.110).aspx
“Classes within the System.Printing namespace are not supported for use within a Windows service or ASP.NET application or service. Attempting to use these classes from within one of these application types may produce unexpected problems, such as diminished service performance and run-time exceptions.”
Edit
I haven't been able to get the .NET print server code to work. We have a collection of web services that perform small steps in a workflow, one of them is to print PDFs. I need to be able to send requests to a print server via .NET without having the print drivers installed the web server hosting the web services. Is there even a way to do this? If so, could someone point me in the right direction?
Original ?
I'm trying to connect to a remote print server in a different domain with the following code.
ps = new PrintServer(#"\\scanprn01",PrintSystemDesiredAccess.AdministratePrinter);
Every time I do so though, it throws the following Access Denied error. I've verified the account I'm using (via System.Security.Principal.WindowsIdentity.GetCurrent().Name) and that account is an administrator on the print server and has explicit full permissions to all the printers. Any advice?
Access Denied Error
System.Printing.PrintServerException was unhandled
HResult=-2147024891
Message=An exception occurred while creating the PrintServer object. Win32 error: Access is denied.
Source=System.Printing
StackTrace:
at System.Printing.PrintServer.Initialize(String path, String[] propertiesFilter, PrinterDefaults printerDefaults)
at System.Printing.PrintServer..ctor(String path, PrintSystemDesiredAccess desiredAccess)
at StubBP2Tester.frmBP2Tester.btnConnectPQ_Click(Object sender, EventArgs e) in C:\vsworkspace\StubBP2Tester\StubBP2Tester\Form1.cs:line 36

Advantage Error 6082

I'm creating a windows service. This service has to read data from an Advantage Database once a day.
I copied the Advantage database on my computer and it works fine but when I try the service on the server I have the following error :
"AdsException : Error 6082: Error loading the Advantage Local Server library."
According to the doc (link) I have to put the ADSLOC32.DLL in \WINDOWS\SYSTEM directory.
I try that but it does not work.
Any ideas?
EDIT : I created a console application that executes exactly the same code as my windows service, and it works exactly as it should. It seems that the problem is from my service, but I don't know what part of my service is wrong...
EDIT 2 : I checked with the process monitor and my service doesn't try to load adsloc32.dll, it tries to load adsloc64.dll. I did not found an adsloc64.dll file so I make a copy of adsloc32.dll to my application directory and named it adsloc64.dll but it didn't work.
I found the solution.
I used Process Monitor from Windows Sysinternals to know from where the program tries to load the dll files.
And it wasn't trying to load adsloc32.dll, it was loading adsloc64.dll.
I just put the adsloc64.dll file to my application directory and it works now.
Try putting adsloc32.dll to the same directory as your application. Maybe there are some problems with rights

WebApplication at "site url" coul not be found

i have made window application, which checks new announcements on sharepoint 2007 site, if any new announcemnt is found it shows it as link in my win application.
application is running fine on my server machine, but when i try to run my window application from normal machine it gives me:
System.IO.FileNotFoundException: The
Web application at
http://Server-Name:Port-Num/lists/announcements/Allitems.aspx could not be found. Verify that you
have typed the URL correctly. If the
URL should be serving existing
content, the system administrator may
need to add a new request URL mapping
to the intended application.
this machine exists on LAN, as i can access site from my browser, but when it comes to win application it gives me the above error on following line:
string rawurl = "http://192.168.1.105:1625/";
SPSite site = new SPSite(rawurl); // this line gives error
It should throw an exception because the Server Object Model you are using like SPSite, SPWeb will not work unless it's on the server either web application or windows application.
If you want to get data from a remote sharepoint server you should use SharePoint Web Services.
This article will help you http://www.infoq.com/articles/swanson-moss-web-services
References:
http://social.msdn.microsoft.com/Forums/en-US/sharepoint2010general/thread/570a4734-d11e-4385-bb97-8625013ebe99/
http://objectmix.com/sharepoint/296959-object-model-new-web-site-creation-remote-sharepoint-server.html
make sure the alternate access mapping is correctly set
so if you can call a page with multiple name (machine name and alias like xxxx73 and portauat) note that may only one works in visual studio so try to fix mapping in central admin or call the page with default main url.
for me noting this small tip, fix my problem in my Sharepoint 2010 UAT environment

Categories