首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTP Get to Report Server2008与DefaultCredentials一起工作,由于某些NetworkCredentials而失败

HTTP Get to Report Server2008与DefaultCredentials一起工作,由于某些NetworkCredentials而失败
EN

Stack Overflow用户
提问于 2010-11-24 22:57:33
回答 1查看 1.4K关注 0票数 0

下面的WithDefaultCredentials()可以工作,但是WithCredentialsMe()失败并返回http 401?不同之处在于,对于报表服务器2008URL,ICredentials credentials = System.Net.CredentialCache.DefaultCredentials;可以正常工作,但ICredentials credentials =ICredentials NetworkCredential("myUsername","myPassword","ourDomain");返回的是HTTP401。

控制台应用程序是由我开发的,所以在DefaultCredentials和NetworkCredential之间应该没有区别。我的用户名和密码没有问题。

有什么想法吗?

代码语言:javascript
复制
static void Main(string[] args)
{
    WithDefaultCredentials();
    WithCredentialsMe();
}
public static void WithDefaultCredentials()
{
    try
    {
        ICredentials credentials = System.Net.CredentialCache.DefaultCredentials;
        string url = "http://myBox/ReportServer_SQLSERVER2008/Pages/ReportViewer.aspx?%2fElfInvoice%2fElfInvoice&rs:Command=Render&InvoiceID=115abba9-61bb-4070-bd28-f572115a2860&rs:format=PDF";
        var bytes = GetByteListFromUrl(url, credentials);
        File.WriteAllBytes(@"c:\temp\A_WithDefaultCredentitials.pdf", bytes.ToArray());
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
public static void WithCredentialsMe()
{
    try
    {
        ICredentials credentials = new NetworkCredential("myUsername", "myPassword", "ourDomain");
        string url = "http://myBox/ReportServer_SQLSERVER2008/Pages/ReportViewer.aspx?%2fElfInvoice%2fElfInvoice&rs:Command=Render&InvoiceID=115abba9-61bb-4070-bd28-f572115a2860&rs:format=PDF";
        var bytes = GetByteListFromUrl(url, credentials);
        File.WriteAllBytes(@"c:\temp\A_Credentials_me_1.pdf", bytes.ToArray());
    }
    catch( Exception ex )
    {
        Console.WriteLine( ex.Message);
    }
}
public static List<Byte> GetByteListFromUrl(string url, System.Net.ICredentials credentials)
{
    List<Byte> lstByte = new List<byte>();
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    if (credentials != null)
    {
        request.Credentials = credentials;
    }
    var response = (HttpWebResponse)request.GetResponse();
    var stream = response.GetResponseStream();
    int totalBytesRead = 0;
    int bufferbytesRead = 0;
    try
    {
        byte[] buffer = new byte[1024];
        while ((bufferbytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
        {
            totalBytesRead += bufferbytesRead;
            if (bufferbytesRead < buffer.Length)
            {
                bufferbytesRead = bufferbytesRead - 1 + 1;
            }
            for (int i = 0; i < bufferbytesRead; i++)
            {
                var bToAdd = buffer[i];
                lstByte.Add(bToAdd);
            }
        }
    }
    catch (Exception ex)
    {

    }
    finally{}
    //-Return 
    return lstByte;
}
EN

回答 1

Stack Overflow用户

发布于 2010-11-25 19:01:16

http://forums.asp.net/t/1217642.aspx的帮助下,这段代码得到了我想要的。下一步是清理所有的东西并在开发中进行单元测试…

代码语言:javascript
复制
    public static void ReportServerWebService()
    {
        // wsdl /out:rs.cs /namespace:ReportService2005 http://mybox/ReportServer_SQLSERVER2008/ReportService2005.asmx?wsdl 
        /// wsdl /out:rsExec.cs /namespace:ReportExecution2005  http://mybox/ReportServer_SQLSERVER2008/ReportExecution2005.asmx?wsdl
        ICredentials credentials = new NetworkCredential("myUserName", "myPassword", "hcml");
        Guid invoiceID = new Guid("115ABBA9-61BB-4070-BD28-F572115A2860"); 
        var rs = new ReportService2005.ReportingService2005();
        var rsExec = new ReportExecution2005.ReportExecutionService();
        rs.Credentials = credentials;
        rsExec.Credentials = credentials;
        string historyID = null;
        string deviceInfo = null;
        string format = "PDF";
        Byte[] bytPDF;
        string encoding = String.Empty;
        string mimeType = String.Empty;
        string extension = String.Empty;
        ReportExecution2005.Warning[] warnings = null;

        string[] streamIDs = null;
        string _reportName = "/ElfInvoice/ElfInvoice" ;
        string _historyID = null;
        bool _forRendering = false;
        ReportService2005.ParameterValue[] _values = null;
        ReportService2005.DataSourceCredentials[] _credentials = null;
        ReportService2005.ReportParameter[] _parameters = null;
        try
        {
            // Get if any parameters needed.
            _parameters = rs.GetReportParameters( _reportName, _historyID, _forRendering, _values, _credentials);
            // Load the selected report.
            var ei = rsExec.LoadReport(_reportName, historyID);

            // Prepare report parameter.
            // Set the parameters for the report needed.
            var parameters = new ReportExecution2005.ParameterValue[1];

            //    // Place to include the parameter.
            if (_parameters.Length > 0)
            {
                parameters[0] = new ReportExecution2005.ParameterValue();
                parameters[0].Label = "InvoiceID";
                parameters[0].Name = "InvoiceID";
                parameters[0].Value = invoiceID.ToString();
            }
            rsExec.SetExecutionParameters(parameters, "en-us");
            bytPDF = rsExec.Render( format , deviceInfo , out extension , out encoding , out mimeType , out warnings , out streamIDs ) ;
            try
            {
                File.WriteAllBytes(@"c:\temp\A_WithMyCredentitials_ReportServerWebService.pdf", bytPDF.ToArray());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4268141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档