0

次のWithDefaultCredentials()は機能しますが、WithCredentialsMe()はHTTP 401を返して失敗しますか? 違いは ICredentials credentials = System.Net.CredentialCache.DefaultCredentials; は、レポートサーバー2008のURLに対しては正常に動作しますが、 ICredentials credentials = new NetworkCredential( "myUsername"、 "myPassword"、 "ourDomain"); はHTTP 401で戻ってきます。HTTPサーバーにDefaultCredentialsを使用し、一部のNetworkCredentialsで失敗する

コンソールアプリケーションは私によって開発されているので、DefaultCredentialsとNetworkCredentialの違いはありません。私のユーザー名とパスワードに問題はありません。

アイデア? http://forums.asp.net/t/1217642.aspxの助けを借りて

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; 
} 

答えて

0

このコードは、私が望んで私を得た... 次のステップは、devにすべてのアップとユニットテストきれいです...

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); 
     } 
    } 
関連する問題