Net Core no cuenta con soporte oficial para SQL Server Reporting Services (SSRS), sin embargo se puede utilizar un web service la cual permite generar y exportar sus reportes.
La URL a consumir cuenta con un formato similar al siguiente, donde es la instancia de tu servidor de SSRS.
https:///ReportServer/ReportExecution2005.asmx?wsdl
Visual studio permite importar y generar códigos en base a un webservice existente, se pude realizar siguiendo los siguientes pasos en un proyecto de net core en visual studio.
Click derecho en la sección "Dependencias" y seleccionar la opción "Agregar servicio conecado".
Seleccionar la opción "Microsoft WCF Web Service Reference Provider".
Llenar el wizard que aparecera en pantalla con la URL del webservice y el namespace en el cual se desea generar el codigo.
El siguiente fragmento de código es un pequeño ejemplo para poder comenzar a utilizar el webservice desde una aplicación de net core.
private ReportExecutionServiceSoapClient GetProxy()
{
var proxy = new ReportExecutionServiceSoapClient(GetBinding(), GetEndpointAddress());
proxy.ClientCredentials.Windows.ClientCredential = new NetworkCredential(config.ReportUserName, config.ReportPassword, config.ReportUserNameDominio);
return proxy;
}
private HttpBindingBase GetBinding(bool isHttps)
{
HttpBindingBase result = null;
if (isHttps)
{
result = new BasicHttpsBinding()
{
Security = {
Mode = BasicHttpsSecurityMode.Transport
}
};
}
else
{
result = new BasicHttpBinding()
{
Security = {
Mode = BasicHttpSecurityMode.TransportCredentialOnly,
Transport = {
ClientCredentialType = HttpClientCredentialType.Ntlm,
ProxyCredentialType = HttpProxyCredentialType.None
}
}
};
}
result.MaxReceivedMessageSize = int.MaxValue;
result.MaxBufferSize = int.MaxValue;
return result;
}
public async Task<object> ExportReport(string reportPath, string reportName, Dictionary<string, string> parameters)
{
try
{
var proxy = GetProxy();
var rsParameters = parameters.Select(it => new ParameterValue() { Name = it.Key, Value = it.Value }).ToArray();
var trustedUserHeader = new TrustedUserHeader();
var loadResponse = await proxy.LoadReportAsync(trustedUserHeader, $"{reportPath}{reportName}", null);
var executionHeader = new ExecutionHeader()
{
ExecutionID = loadResponse.executionInfo.ExecutionID
};
await proxy.SetExecutionParametersAsync(executionHeader, trustedUserHeader, rsParameters, "");
var request = new RenderRequest(executionHeader,
trustedUserHeader,
exportType.ToString(),
new XElement("DeviceInfo", new XElement("OutputFormat", "PDF")).ToString()
);
var response = await proxy.RenderAsync(request);
await proxy.CloseAsync();
return new
{
Bytes = response.Result,
Encoding = response.Encoding,
FileNameExtension = response.Extension,
MimeType = response.MimeType,
Streams = response.StreamIds,
Warnings = response.Warnings?.Select(it => it.Message).ToArray()
};
}
catch (Exception ex)
{
string message = ex.GetBaseException().Message;
throw ex;
}
}
Ahora con la función "ExportReport" se podra exportar cualquier reporte de SSRS como PDF, por ejemplo
var report = await ExportReport("intancia/misReportes",
"Empleados",
new Dictionary<string, string>() { {"Departamento", "IT"} }
);
Para mas información respecto a este tema, se pueden consultar los siguientes enlaces:
Report Server Web Service Endpoints - SQL Server Reporting Services (SSRS)
Top comments (0)