public override void MapDataFields(System.Data.DataRow currentRow)
        {
            base.MapDataFields(currentRow);

            System.Xml.XmlDocument configurationXml = new System.Xml.XmlDocument();


            assemblyPath = (String)currentRow["AssemblyPath"];

            assemblyName = (String)currentRow["AssemblyName"];

            assemblyClassName = (String)currentRow["AssemblyClassName"];


            WebServiceHostConfiguration = new Public.WebService.WebServiceHostConfiguration();

            try {
                if (!String.IsNullOrEmpty((String)currentRow["WebServiceHostConfiguration"]))
                {
                    configurationXml.LoadXml((String)currentRow["WebServiceHostConfiguration"]);

                    WebServiceHostConfiguration.XmlImport(configurationXml.ChildNodes[0]);
                }
            }

            catch { /* DO NOTHING */ }

            return;
        }
        public override List <ImportExport.Result> XmlImport(System.Xml.XmlNode objectNode)
        {
            List <ImportExport.Result> response = base.XmlImport(objectNode);


            try {
                foreach (System.Xml.XmlNode currentNode in objectNode.ChildNodes)
                {
                    switch (currentNode.Name)
                    {
                    case "Properties":

                        foreach (System.Xml.XmlNode currentPropertyNode in currentNode.ChildNodes)
                        {
                            switch (currentPropertyNode.Attributes["Name"].InnerText)
                            {
                            case "AssemblyPath": AssemblyPath = currentPropertyNode.InnerText; break;

                            case "AssemblyName": AssemblyName = currentPropertyNode.InnerText; break;

                            case "AssemblyClassName": AssemblyClassName = currentPropertyNode.InnerText; break;

                            case "WebServiceHostConfiguration":

                                System.Xml.XmlDocument configurationXml = new System.Xml.XmlDocument();


                                WebServiceHostConfiguration = new Public.WebService.WebServiceHostConfiguration();

                                try {
                                    if (!String.IsNullOrEmpty(currentPropertyNode.InnerText))
                                    {
                                        configurationXml.LoadXml(currentPropertyNode.InnerText);

                                        WebServiceHostConfiguration.XmlImport(configurationXml.ChildNodes[0]);
                                    }
                                }

                                catch { /* DO NOTHING */ }

                                break;

                            default: break;
                            }
                        }

                        break;
                    } // switch (currentNode.Attributes["Name"].InnerText) {
                }     // foreach (System.Xml.XmlNode currentNode in objectNode.ChildNodes) {


                // SAVE IMPORTED CLASS

                if (!Save())
                {
                    throw new ApplicationException("Unable to save Reporting Server: " + Name + ".");
                }
            }

            catch (Exception importException) {
                response.Add(new ImportExport.Result(ObjectType, Name, importException));
            }

            return(response);
        }
Beispiel #3
0
        public Public.ImageStream Render(Public.WebService.WebServiceHostConfiguration webServiceHostConfiguration, String reportName, Dictionary <String, String> forReportParameters, String format, Dictionary <String, String> extendedProperties)
        {
            Public.ImageStream imageStream = new Public.ImageStream();

            Boolean deviceInfoHumanReadablePdf = ((extendedProperties.ContainsKey("DeviceInfoHumanReadablePdf")) ? Convert.ToBoolean(extendedProperties["DeviceInfoHumanReadablePdf"]) : false);


            #region Initialization

            // ENABLE IMPERSONATION FROM THREAD IDENTITY

            // AppDomain.CurrentDomain.SetPrincipalPolicy (System.Security.Principal.PrincipalPolicy.WindowsPrincipal);

            // System.Security.Principal.WindowsImpersonationContext impersonationContext = null;

            // impersonationContext = ((System.Security.Principal.WindowsIdentity)System.Threading.Thread.CurrentPrincipal.Identity).Impersonate ();


            // CONFIGURE REPORTING SERVICE HOST


            reportExecutionClient = new ReportExecution2005.ReportExecutionServiceSoapClient(webServiceHostConfiguration.BindingConfiguration.Binding, webServiceHostConfiguration.EndpointAddress);

            reportExecutionClient.ClientCredentials.Windows.AllowedImpersonationLevel = webServiceHostConfiguration.ClientCredentials.WindowsImpersonationLevel;

            reportExecutionClient.ClientCredentials.Windows.ClientCredential = webServiceHostConfiguration.ClientCredentials.Credentials;


            #region Old Connection Information

            //Server.Public.WebService.WebServiceHostConfiguration serviceHostReporting = new Server.Public.WebService.WebServiceHostConfiguration (

            //    "qstestmcm001", 80, "ReportServer", "ReportExecution2005.asmx"

            //    );

            //serviceHostReporting.ClientCredentials.WindowsImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

            //serviceHostReporting.BindingConfiguration = new Server.Public.WebService.BindingConfiguration ("BasicHttpBinding", Server.Public.WebService.Enumerations.WebServiceBindingType.BasicHttpBinding);

            //serviceHostReporting.BindingConfiguration.SecurityMode = System.ServiceModel.BasicHttpSecurityMode.TransportCredentialOnly;

            //serviceHostReporting.BindingConfiguration.TransportCredentialType = System.ServiceModel.HttpClientCredentialType.Ntlm;

            //serviceHostReporting.BindingConfiguration.MessageCredentialType = System.ServiceModel.MessageCredentialType.UserName;


            //System.ServiceModel.BasicHttpBinding binding = (System.ServiceModel.BasicHttpBinding)serviceHostReporting.BindingConfiguration.Binding;

            ////binding.AllowCookies = true;


            //reportExecutionClient = new ReportExecution2005.ReportExecutionServiceSoapClient (binding, serviceHostReporting.EndpointAddress);

            //reportExecutionClient.ClientCredentials.Windows.AllowedImpersonationLevel = serviceHostReporting.ClientCredentials.WindowsImpersonationLevel;

            //reportExecutionClient.ClientCredentials.Windows.ClientCredential = serviceHostReporting.ClientCredentials.Credentials;

            #endregion


            // OPEN UP THE MAX OBJECTS IN GRAPH TO MAXIMUM

            foreach (System.ServiceModel.Description.OperationDescription currentOperation in reportExecutionClient.Endpoint.Contract.Operations)
            {
                System.ServiceModel.Description.DataContractSerializerOperationBehavior dataContractSerializer =

                    (System.ServiceModel.Description.DataContractSerializerOperationBehavior)

                    currentOperation.Behaviors.Find <System.ServiceModel.Description.DataContractSerializerOperationBehavior> ();

                if (dataContractSerializer != null)
                {
                    dataContractSerializer.MaxItemsInObjectGraph = Int32.MaxValue;
                }
            }

            #endregion


            #region Render Report

            SqlServer.ReportExecution2005.ExecutionHeader executionHeader;

            SqlServer.ReportExecution2005.ServerInfoHeader serverInfoHeader;

            SqlServer.ReportExecution2005.ExecutionInfo executionInfo;

            SqlServer.ReportExecution2005.ParameterValue[] parameters = new ReportExecution2005.ParameterValue[forReportParameters.Count];

            Byte[] renderedReport;

            String reportExtension;

            String reportMimeType;

            String reportEncoding;

            SqlServer.ReportExecution2005.Warning[] reportWarnings;

            String[] reportStreamIds;


            executionHeader = reportExecutionClient.LoadReport(null, reportName, null, out serverInfoHeader, out executionInfo);


            // COPY PARAMETERS

            Int32 currentParameterIndex = 0;

            foreach (String currentParameterName in forReportParameters.Keys)
            {
                parameters[currentParameterIndex] = new ReportExecution2005.ParameterValue();

                parameters[currentParameterIndex].Label = currentParameterName;

                parameters[currentParameterIndex].Name = currentParameterName;

                parameters[currentParameterIndex].Value = forReportParameters[currentParameterName];

                currentParameterIndex = currentParameterIndex + 1;
            }

            reportExecutionClient.SetExecutionParameters(executionHeader, null, parameters, "en-us", out executionInfo);


            // SET UP DEVICE INFORMATION

            String deviceInfo = String.Empty;

            switch (format.ToLower())
            {
            case "pdf":

                deviceInfo = (deviceInfoHumanReadablePdf) ? @"<DeviceInfo><HumanReadablePDF>True</HumanReadablePDF></DeviceInfo>" : String.Empty;

                break;
            }


            serverInfoHeader = reportExecutionClient.Render(executionHeader, null, format, ((!String.IsNullOrEmpty(deviceInfo)) ? deviceInfo : null), out renderedReport, out reportExtension, out reportMimeType, out reportEncoding, out reportWarnings, out reportStreamIds);

            imageStream.Image = new System.IO.MemoryStream(renderedReport);

            imageStream.Name = reportName;

            imageStream.Extension = reportExtension;

            imageStream.MimeType = reportMimeType;

            #endregion


            return(imageStream);
        }