0

さて、私はすでにこの問題を解決するために多くのことを試しましたが、誰も解決しませんでした.

Reporting Service (2005) を開発し、展開しました。

このレポートは、フレームワーク 3.5 で開発された Web サイト (インターネット サイトであるため、イントラネットからはアクセスされません) にアクセスするすべての人が使用します (ただし、フレームワークのバージョンは問題の原因ではないと思います)。

認証に関して他の問題があり、回避策には、Web サイトで FileStream クラスを使用することが含まれていました。

ReportExecutionService rs = new ReportExecutionService();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
rs.Url = "http://MyServer/ReportServer/ReportExecution2005.asmx";

arguments
byte[] result = null;
string reportPath = "/ReportLuiza/ReportContract";
string format = "PDF";

// Prepare report parameter.
ParameterValue[] parameters = new ParameterValue[1];
parameters[0] = new ParameterValue();
parameters[0].Name = "NMB_CONTRACT";
parameters[0].Value = txtNmbContractReport.Text;

string encoding;
string mimeType;
string extension;
Warning[] warnings = null;
string[] streamIDs = null;

ExecutionInfo execInfo = new ExecutionInfo();
ExecutionHeader execHeader = new ExecutionHeader();

rs.ExecutionHeaderValue = execHeader;

execInfo = rs.LoadReport(reportPath, null);

rs.SetExecutionParameters(parameters, "pt-br");
String SessionId = rs.ExecutionHeaderValue.ExecutionID;

try
{
   result = rs.Render(format, null, out extension, out encoding, out mimeType, out warnings, out streamIDs);

   execInfo = rs.GetExecutionInfo();
}
catch (SoapException se)
{
    ShowMessage(se.Detail.OuterXml);
}

// Write the contents of the report to an pdf file.
try
{
    using (FileStream stream = new FileStream(@"c:\report.pdf", FileMode.Create, FileAccess.ReadWrite))
    {
        stream.Write(result, 0, result.Length);
        stream.Close();
    }
}
catch (Exception ex)
{
    ShowMessage(ex.Message);
}

このコードでは、記載されている .asmx ファイルに WebReference を追加する必要がありました。

Report と WebSite の両方が、IIS 7.5 バージョンの同じサーバーに展開/公開されます。

ユーザーが .pdf ファイルを保存する場所を選択できる方法はありますか?

どんな助けでも大歓迎です。

さらに詳しい情報が必要な場合は、お尋ねください。

前もって感謝します。

4

1 に答える 1

1

try-catch2 つのブロックを結合したい場合があります。

ReportExecutionService rs = new ReportExecutionService();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
rs.Url = "http://MyServer/ReportServer/ReportExecution2005.asmx";

arguments
byte[] result = null;
string reportPath = "/ReportLuiza/ReportContract";
string format = "PDF";

// Prepare report parameter.
ParameterValue[] parameters = new ParameterValue[1];
parameters[0] = new ParameterValue();
parameters[0].Name = "NMB_CONTRACT";
parameters[0].Value = txtNmbContractReport.Text;

string encoding;
string mimeType;
string extension;
Warning[] warnings = null;
string[] streamIDs = null;

ExecutionInfo execInfo = new ExecutionInfo();
ExecutionHeader execHeader = new ExecutionHeader();

rs.ExecutionHeaderValue = execHeader;

execInfo = rs.LoadReport(reportPath, null);

rs.SetExecutionParameters(parameters, "pt-br");
String SessionId = rs.ExecutionHeaderValue.ExecutionID;

try
{
   result = rs.Render(format, null, out extension, out encoding, out mimeType, out warnings, out streamIDs);

   execInfo = rs.GetExecutionInfo();
}
catch (SoapException se)
{
    ShowMessage(se.Detail.OuterXml);
}

// Write the contents of the report to an pdf file.
try
{
    /*
    using (FileStream stream = new FileStream(@"c:\report.pdf", FileMode.Create, FileAccess.ReadWrite))
    {
        stream.Write(result, 0, result.Length);
        stream.Close();
    }
    */
    Response.Clear();
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Disposition", "attachment;filename=\"report.pdf\"");
    Response.BinaryWrite(result);
    Response.Flush();
    Response.End();
}
catch (Exception ex)
{
    ShowMessage(ex.Message);
}
于 2013-04-29T18:53:08.270 に答える