Rad*_*adu 6 authentication wcf soap reporting-services asp.net-core
我在.Net Core中使用ReportExecutionServiceSoapClient我得到了.net Core的最新版本,并尝试从报告服务中获取报告.在我使用WCF连接服务之后,我能够添加看起来像下面的代码
// Instantiate the Soap client
ReportExecutionServiceSoap rsExec = new ReportExecutionServiceSoapClient(ReportExecutionServiceSoapClient.EndpointConfiguration.ReportExecutionServiceSoap);
// Create a network credential object with the appropriate username and password used
// to access the SSRS web service
string historyID = null;
TrustedUserHeader trustedUserHeader = new TrustedUserHeader();
ExecutionHeader execHeader = new ExecutionHeader();
// Here we call the async LoadReport() method using the "await" keyword, which means any code below this method
// will not execute until the result from the LoadReportAsync task is returned
var taskLoadReport = rsExec.LoadReportAsync(reportPath, historyID);
// By the time the LoadReportAsync task is returned successfully, its "executionInfo" property
// would have already been populated. Now the remaining code in this main thread will resume executing
string deviceInfo = null;
string format = "EXCEL";
// Now, similar to the above task, we will call the RenderAsync() method and await its result
var taskRender = await rsExec.RenderAsync(renderReq);
Run Code Online (Sandbox Code Playgroud)
当它的组织renderAsync全部崩溃,因为服务的凭证没有在任何地方设置.我试图登录异步没有成功.此外,我尝试使用SetExecutionCredentialsAsync设置凭据,但我得到并且错误地说"HTTP请求未经授权使用客户端身份验证方案'匿名'.从服务器收到的身份验证标头是'NTLM'." 我不知道如何为ReportExecutionServiceSoapClient更改它.
我已经阅读了一些帖子,其中微软的人说用肥皂的身份验证没有解决,但对我来说似乎是如此接近真实.我觉得我错过了什么.
技术堆栈:VS 2017,.net核心web api,ssrs 2016,sql server 2016标准
如何对此呼叫的用户进行身份验证?
小智 6
我知道这是一个老问题,但我遇到了同样的问题并偶然发现了答案。
创建 ReportExecutionServiceSoap 对象后,您可以在 ClientCredentials 中指定用户名和密码。我使用基本客户端凭据类型成功完成了此操作。确保您使用的是 HTTPS,否则您的密码将以明文形式发送到报告服务器。我还建议将用户/密码存储在安全的地方,而不是代码。
BasicHttpBinding rsBinding = new BasicHttpBinding();
rsBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
rsBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
EndpointAddress rsEndpointAddress = new EndpointAddress("https://servername/ReportServer/ReportExecution2005.asmx");
var rsExec = new ReportExecutionServiceSoapClient(rsBinding, rsEndpointAddress);
rsExec.ClientCredentials.UserName.UserName = "username";
rsExec.ClientCredentials.UserName.Password = "pass";
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
965 次 |
最近记录: |