这是一个对我有用的示例
网络配置 ...
<!-- Reporting -->
<add key="ReportingUserName" value="xxxxx\xxxx" />
<add key="ReportingPassword" value="xxxxxxxxx" />
<add key="ReportingDomain" value="xxxxxxx" />
<endpoint address="http://xxxxxx/ReportServer/ReportExecution2005.asmx" binding="basicHttpBinding" bindingConfiguration="basicHttpBindingConfig" contract="SSRS.ReportExecutionServiceSoap" name="ReportExecutionServiceSoap" />
<!-- Binding for Reporting Services over HTTP -->
<binding name="basicHttpBindingConfig" allowCookies="true" maxReceivedMessageSize="52428800" sendTimeout="00:10:00">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
outputType ReportFormat 即 Pdf,Image,Excel,Ffd
deviceInfo 包含用于报告服务的 XML 字符串,基于
报告格式
reportPath 包含 SSRS 服务器“/xxx/datarecord-Table”上的报告路径
private SsrsResponse ExecuteSsrsReport(string reportPath, IEnumerable<KeyValuePair<string, string>> parameters,
string outputType, string deviceInfo)
{
using (var rs = new ReportExecutionServiceSoapClient())
{
if (rs.ClientCredentials != null)
{
rs.ClientCredentials.Windows.ClientCredential = GetReportingCredentials();
rs.ClientCredentials.Windows.AllowedImpersonationLevel =
System.Security.Principal.TokenImpersonationLevel.Impersonation;
}
byte[] result;
Warning[] warnings;
string[] streamIds;
ParameterValue[] parameterValues =
parameters.Select(p => new ParameterValue { Name = p.Key, Value = p.Value }).ToArray();
ExecutionInfo execInfo;
ServerInfoHeader serverInfoHeader;
ExecutionHeader execHeader =
rs.LoadReport(null, reportPath, null, out serverInfoHeader, out execInfo);
rs.SetExecutionParameters(execHeader, null, parameterValues, "en-us", out execInfo);
string extension, mimeType, encoding;
rs.Render(execHeader, null, outputType, deviceInfo,
out result, out extension, out mimeType, out encoding, out warnings, out streamIds);
return new SsrsResponse(result, extension, mimeType, encoding);
}
}
private NetworkCredential GetReportingCredentials()
{
return new NetworkCredential(
ConfigurationManager.AppSettings["ReportingUserName"],
ConfigurationManager.AppSettings["ReportingPassword"],
ConfigurationManager.AppSettings["ReportingDomain"]
);
}