Telerik blogs

With the 2010 Q1 SP1 release of Telerik Reporting we have introduced Self-Hosted Reporting WCF Service. In the following blog we are explaining how to use our new feature.

First lets highlight the advantages of the Self-Hosted services:

  • Easy to use: With only a few lines of code you have your service running.
  • Easy to debug: Debugging WCF services that are hosted in a self-hosted environment provides a familiar way of debugging, without having to attach to separate applications that activate your service.
  • Easy to deploy.
  • Flexible: You can easily control the lifetime of your services.
  • Supports all bindings and transport.

For the service we choose to operate at address http://localhost:54321.

  1. Create a new Windows console application and make sure it uses .NET Framework 3.5
  2. Add references to the following assemblies:
    • System.ServiceModel
    • System.Runtime.Serialization
    • System.Drawing
    • System.Windows.Forms
  3. Add references to the following Telerik Reporting assemblies:
    • Telerik.Reporting
    • Telerik.Reporting.Service
    • Telerik.Reporting.XamlRendering – optional; in case you plan to render reports in XPS format
  4. The Telerik Reporting WCF Service is represented by the Telerik.Reporting.Service.ReportServiceBase - abstract class that requires a base URI to be used for proper resource resolution. This base URI is usually the well-known address of the report service endpoint:

    namespace TelerikReportingServiceHostApp
    {
        [System.Runtime.Serialization.KnownType(typeof(object[]))]
        class ReportService : Telerik.Reporting.Service.ReportServiceBase
        {
            static readonly Uri baseUri = new Uri("http://localhost:54321/reportservice");
     
            protected override Uri BaseAddress
            {
                get { return baseUri; }
            }
        }
    }
     
  5. Create a ServiceHost for our ReportService and call its Open method:

    namespace TelerikReportingServiceHostApp
    {
        class Program
        {
            static void Main(string[] args)
            {        
     
                System.ServiceModel.ServiceHost host = new System.ServiceModel.ServiceHost(typeof(TelerikReportingServiceHostApp.ReportService));
                host.Open();
     
                // Block the Main() method until the user presses a key; then close the host and exit the program
                Console.WriteLine("Ready...");
                Console.ReadLine();
     
                host.Close();
            }
        }
    }
     
  6. To configure the service and its endpoints add the next code to the application’s configuration file:
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
       
      
     
      <system.serviceModel>
        <services>
          <service name="TelerikReportingServiceHostApp.ReportService"
                   behaviorConfiguration="ReportServiceBehavior">
     
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:54321"/>
              </baseAddresses>
            </host>
     
            <endpoint address="ReportService"
                      binding="basicHttpBinding"
                      contract="Telerik.Reporting.Service.IReportService">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>
     
            <endpoint address="ReportService/resources"
                      binding="webHttpBinding"
                      behaviorConfiguration="WebBehavior"
                      contract="Telerik.Reporting.Service.IResourceService"/>
     
            <endpoint address=""
                      binding="webHttpBinding"
                      behaviorConfiguration="WebBehavior"
                      contract="Telerik.Reporting.Service.IClientAccessPolicy"/>
     
            <endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange" />
          </service>
        </services>
     
        <behaviors>
          <serviceBehaviors>
            <behavior name="ReportServiceBehavior">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
     
          <endpointBehaviors>
            <behavior name="WebBehavior">
              <webHttp />
            </behavior>
          </endpointBehaviors>
        </behaviors>
      </system.serviceModel>
     
       
    </configuration>
     
  7. Add a new report to the project to test the self-hosted report service:
     
    namespace TelerikReportingServiceHostApp
    {
        using System;
        using System.ComponentModel;
        using System.Drawing;
        using System.Windows.Forms;
        using Telerik.Reporting;
        using Telerik.Reporting.Drawing;
     
        public class Report1 : Telerik.Reporting.Report
        {
            public Report1()
            {
                Telerik.Reporting.TextBox textBox1 = new Telerik.Reporting.TextBox();
                textBox1.Location = new Telerik.Reporting.Drawing.PointU(Unit.Inch(0.3), Unit.Inch(0.3));
                textBox1.Size = new Telerik.Reporting.Drawing.SizeU(Unit.Inch(3.4), Unit.Inch(0.4));
                textBox1.Value = "Hello, self-hosted Telerik Reporting WCF Service :-)";
     
                Telerik.Reporting.DetailSection detail = new Telerik.Reporting.DetailSection();
                detail.Height = Unit.Inch(1);
                detail.Items.Add(textBox1);
     
                this.Items.Add(detail);
            }       
        }
    }
     
  8. Run the application – the Windows console will appear and when the “Ready…” message appears the service is ready to operate.
  9. To test the self-hosted Telerik Reporting WCF Service we use the Export operation for the Resource Service (Telerik.Reporting.Service.IResourceService). As it is dedicated to be used by HTTP GET request we will an web browser application as a client. Open any web browser and type the next address:

    http://localhost:54321/reportservice/resources/export?format=PDF&report=TelerikReportingServiceHostApp.Report1,TelerikReportingServiceHostApp&deviceInfo={}&parameterValues={}
     
    This will call the IResourceService. Export operation that will render the TelerikReportingServiceHostApp.Report1 in PDF with no deviceInfo or parameterValues. When completed, a PDF document will be sent back to the browser.


About the Author

Stefan Tsokev

Stefan’s main interests outside the .NET domain include rock music, playing the guitar and swimming.

Related Posts

Comments

Comments are disabled in preview mode.