【发布时间】:2014-11-29 12:37:56
【问题描述】:
我已经使用 VB.NET 构建了一个 Web Matrix 站点。我添加了一个名为reports.aspx 的文件来处理一些报告。具体来说,它使用 Neodynamic Web Client Print SDK 将报告从 SSRS 保存为 PDF,然后重定向到一个名为 reports.ashx 的处理程序文件,该文件实际处理打印。
reports.aspx 中的代码
<%@ Page Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="Microsoft.Reporting.WebForms" %>
<%-- Register the WebClientPrint script code --%>
<%=Neodynamic.SDK.Web.WebClientPrint.CreateScript(MyUtils.GetWebsiteRoot() + "reports.ashx")%>
<!DOCTYPE html>
<script language="VB" runat="server">
Private Sub Page_Load(sender As Object, e As EventArgs)
Dim reportname As String
Dim paramBlock As New ReportParameter()
Dim paramID As New ReportParameter()
reportname = Request("reportname")
Dim v As New ReportViewer
v.ProcessingMode = ProcessingMode.Remote
Dim serverreport As New ServerReport
serverreport = v.ServerReport
serverreport.ReportServerUrl = New Uri("http://websql1.core.com/Reports")
serverreport.ReportPath = "/Reports/Aramid/Sheeter/" & reportname
Select Case reportname
Case Is = "NomexBlockCard" Or "NomexBlockLabel" Or "NomexInternalLabel"
paramBlock.Name = "paramBlock"
paramBlock.Values.Add(Request("paramBlock"))
Dim parameters() As ReportParameter = {paramBlock}
Case Is = "NomexRoutingData"
paramID.Name = "paramID"
paramID.Values.Add(Convert.ToInt32(Request("paramID")))
Dim parameters() As ReportParameter = {paramID}
End Select
serverreport.SetParameters(parameters)
Save(serverreport, "~/Files/")
'now print
Response.Redirect("reports.ashx?fileName=" & reportname)
End Sub
Public Sub Save(ByVal sr As ServerReport, ByVal savePath As String)
Dim Bytes() As Byte = sr.Render("PDF", "", Nothing, Nothing, Nothing, Nothing, Nothing)
Using Stream As New FileStream(savePath, FileMode.Create)
Stream.Write(Bytes, 0, Bytes.Length)
End Using
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
</body>
</html>
reports.ashx 中的代码
<%@ WebHandler Language="VB" Class="reports" %>
Imports System
Imports System.Web
Imports Neodynamic.SDK.Web
Public Class reports : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim useDefaultPrinter As Boolean = True '(context.Request("useDefaultPrinter") = "checked")
Dim printerName As String = context.Server.UrlDecode(context.Request("printerName"))
Dim fileName As String = context.Server.UrlDecode(context.Request("fileName"))
Dim filePath As String = "~/Files/"
If (filePath <> Nothing) Then
Dim file As New PrintFile(context.Server.MapPath(filePath), fileName)
Dim cpj As New ClientPrintJob()
cpj.PrintFile = file
If (useDefaultPrinter OrElse printerName = "null") Then
cpj.ClientPrinter = New DefaultPrinter()
Else
cpj.ClientPrinter = New InstalledPrinter(printerName)
End If
cpj.SendToClient(context.Response)
End If
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
当我打开 Visual Studio 进行构建和发布时,出现以下错误。
“从模块 system.web 的程序集中导入类型 system.web.httpcontextbase 失败”
查看reports.aspx中的代码,行下有错误
Dim v as New ReportViewer
错误更正选项说“需要引用 System.Web.Extensions 版本 = 3.5.0.0,.... 包含已实现的接口 System.Web.UI.IScriptControl。向您的项目添加一个"
我引用 System.Web、System.Web.Extensions 和 System.Web.Abstractions。
针对 .NET 4
请帮助我理解这个问题或需要查看的内容。
谢谢!
【问题讨论】: