加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

wcf – .Net Core ReportExecutionServiceSoapClient设置凭据

发布时间:2020-12-16 03:46:13 所属栏目:asp.Net 来源:网络整理
导读:我在.Net Core中使用ReportExecutionServiceSoapClient我得到了.net Core的最新版本,并尝试从报告服务中获取报告.在我使用WCF连接服务之后,我能够添加看起来像下面的代码 // Instantiate the Soap client ReportExecutionServiceSoap rsExec = new ReportExe
我在.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);

当它的组织renderAsync全部崩溃,因为服务的凭证没有在任何地方设置.我试图登录异步没有成功.此外,我尝试使用SetExecutionCredentialsAsync设置凭据,但我得到并且错误地说“HTTP请求未经授权使用客户端身份验证方案’匿名’.从服务器收到的身份验证标头是’NTLM’.”我不知道如何为ReportExecutionServiceSoapClient更改它.

我已经阅读了一些帖子,其中微软的人说用肥皂的身份验证没有解决,但对我来说似乎是如此接近真实.我觉得我错过了什么.

技术堆栈:VS 2017,.net核心web api,ssrs 2016,sql server 2016标准

如何对此呼叫的用户进行身份验证?

解决方法

我知道这是一个古老的问题,但我有同样的问题,偶然发现了答案.

创建ReportExecutionServiceSoap对象后,您可以在ClientCredentials中指定用户名和密码.我使用Basic客户端凭证类型获得了成功.请确保您使用的是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";

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读