在C#中使用WebRequest时为Microsoft Report Server提供凭据

安德烈·里歇尔特(AndréReichelt)

我想使用我的C#代码从Microsoft报表服务器下载PDF报表。我不知道为什么,但是我做错了。我总是收到一条错误消息,提示身份验证失败(HTTP 401)。

public static async Task<Stream> DownloadWebDocument(string url) {
    if (string.IsNullOrEmpty(url))
        throw new ArgumentNullException(nameof(url));

    WebRequest request = WebRequest.Create(url);

    request.Method = "GET";
    request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;
    request.Credentials = new NetworkCredential("MyUsername", "MyPassword", "MyDomain");

    //request.Headers.Add("Authorization", $"Basic {Convert.ToBase64String(System.Text.Encoding.Default.GetBytes("MyUsername:MyPassword"))}");

    try {
        using WebResponse response = await request.GetResponseAsync();

        return response.GetResponseStream();
    } catch (Exception ex) {
        var a = ex.Message;

        throw;
    }

    //return await DownloadWebDocument(uri);
}

此代码始终会遇到异常。但为什么?

PS:

根据要求,这是堆栈跟踪。没有内在的例外。

   bei System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   bei System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde ---
   bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   bei System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   bei DE.ZA.TrailerLoadingAssistant.Web.Code.WebHelper.<DownloadWebDocument>d__0.MoveNext() in C:\Users\Reichelt\source\repos\DE.ZA.TrailerLoading\DE.ZA.TrailerLoadingAssistant.Web\Code\WebHelper.cs:Zeile 28.
杰里米·汤普森

我意识到,如果我使用request.Credentials = CredentialCache.DefaultCredentials,它就可以工作。因此,我的凭据肯定有问题。但这绝对不是错字。

我遇到了这个问题,似乎有人在更改网络权限。一个星期使用凭据将起作用,然后第二个星期使用DefaultCredentials将起作用。真的很奇怪,因此如果服务帐户失败,我会尝试/捕获并使用DefaultCredentials,请参见代码注释:

public class SRSHelper
{
    private ReportingService2005 rsServ;
    private ReportingExecution2005 rsExec = new ReportingExecution2005();
    private ReportParameter[] reportParameters;
    private ExecutionInfo execInfo = null;

    public SRSHelper(string reportUserName, string decryptedPassword, string reportDomain, string reportServerURL)
     {
        rsServ = new ReportingService2005(reportServerURL);
        rsExec.Url = reportServerURL + @"ReportExecution2005.asmx";

        System.Net.NetworkCredential creds = new System.Net.NetworkCredential();
        creds.UserName = reportUserName;
        creds.Password = decryptedPassword;
        creds.Domain = reportDomain;
        rsExec.Credentials = creds;
        rsServ.Credentials = creds;
     }

    public ReportParameter[] GetSRSReportParameters(string reportName)
    {
        string report = "/Reporting/" + reportName;
        bool forRendering = false;
        string historyID = null;
        ParameterValue[] values = null;
        DataSourceCredentials[] credentials = null;

        try
        {
            return rsServ.GetReportParameters(report, historyID, forRendering, values, credentials);
        }
        catch
        {
            //If the Service Account credentials fail to work - try the users credentials - XYZ vendor regularly change things around or the network fails or for some reason beyond our control we have to change the settings.
            rsExec.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
            rsServ.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
            return rsServ.GetReportParameters(report, historyID, forRendering, values, credentials);
        }
            
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

URL中提供凭据时,为什么浏览器不发送Authentication标头?

来自分类Dev

使用HttpClient提供凭据后以编程方式注销

来自分类Dev

如何使用GoogleApiClient为云端点客户端提供凭据

来自分类Dev

Team Foundation Client未使用提供的凭据

来自分类Dev

Microsoft Report依赖项

来自分类Dev

如何在C#中将SQL Server Compact Edition数据库连接到Crystal Report

来自分类Dev

在Crystal Report和ASP.NET C#中使用子报表

来自分类Dev

C#中的Windows凭据提供程序

来自分类Dev

使用Silhouette 4.0播放2.5-凭据提供程序

来自分类Dev

GitAhead:尝试推送时要求提供凭据-无法继续

来自分类Dev

无法使用提供的凭据登录django DRF

来自分类Dev

使用C#更改Crystal Report上Box的颜色

来自分类Dev

Powershell为RunAs提供凭据

来自分类Dev

运行Crystal Report时出错

来自分类Dev

添加新帐户时,Outlook 2013不断要求提供凭据

来自分类Dev

内网站点在使用匿名访问时要求提供凭据

来自分类Dev

使用SQL Server Report Builder 2008 2.0重命名Excel工作表

来自分类Dev

带TFS的SQL Server Report Builder 3.0?

来自分类Dev

如何使用SQL Server CE检索记录并使用Crystal Report显示?

来自分类Dev

Hopw确保您正在使用Report Server的最新版本的SSRS Report

来自分类Dev

使用C#在运行时将Crystal Report TextObject设置为粗体

来自分类Dev

C#中的Crystal Report Chart选项

来自分类Dev

登录时未通过凭据提供程序加载KSP(密钥存储提供程序)

来自分类Dev

使用Silhouette 4.0播放2.5-凭据提供程序

来自分类Dev

在C#中加载Crystal Report时保存登录信息

来自分类Dev

如何使用 MS SQL Server Report Builder 3.0 编写带括号的 where 子句

来自分类Dev

如何使用 Azure Active Directory 凭据连接到 SQL Server?

来自分类Dev

使用 XmlUriResolver 为远程共享提供凭据

来自分类Dev

凭据提供程序使用场景是如何定义的

Related 相关文章

  1. 1

    URL中提供凭据时,为什么浏览器不发送Authentication标头?

  2. 2

    使用HttpClient提供凭据后以编程方式注销

  3. 3

    如何使用GoogleApiClient为云端点客户端提供凭据

  4. 4

    Team Foundation Client未使用提供的凭据

  5. 5

    Microsoft Report依赖项

  6. 6

    如何在C#中将SQL Server Compact Edition数据库连接到Crystal Report

  7. 7

    在Crystal Report和ASP.NET C#中使用子报表

  8. 8

    C#中的Windows凭据提供程序

  9. 9

    使用Silhouette 4.0播放2.5-凭据提供程序

  10. 10

    GitAhead:尝试推送时要求提供凭据-无法继续

  11. 11

    无法使用提供的凭据登录django DRF

  12. 12

    使用C#更改Crystal Report上Box的颜色

  13. 13

    Powershell为RunAs提供凭据

  14. 14

    运行Crystal Report时出错

  15. 15

    添加新帐户时,Outlook 2013不断要求提供凭据

  16. 16

    内网站点在使用匿名访问时要求提供凭据

  17. 17

    使用SQL Server Report Builder 2008 2.0重命名Excel工作表

  18. 18

    带TFS的SQL Server Report Builder 3.0?

  19. 19

    如何使用SQL Server CE检索记录并使用Crystal Report显示?

  20. 20

    Hopw确保您正在使用Report Server的最新版本的SSRS Report

  21. 21

    使用C#在运行时将Crystal Report TextObject设置为粗体

  22. 22

    C#中的Crystal Report Chart选项

  23. 23

    登录时未通过凭据提供程序加载KSP(密钥存储提供程序)

  24. 24

    使用Silhouette 4.0播放2.5-凭据提供程序

  25. 25

    在C#中加载Crystal Report时保存登录信息

  26. 26

    如何使用 MS SQL Server Report Builder 3.0 编写带括号的 where 子句

  27. 27

    如何使用 Azure Active Directory 凭据连接到 SQL Server?

  28. 28

    使用 XmlUriResolver 为远程共享提供凭据

  29. 29

    凭据提供程序使用场景是如何定义的

热门标签

归档