- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将提供有关该项目的尽可能多的信息,然后提供相关的源代码,然后提供有关我已经尝试过的内容的信息(如果有,我将尝试包含我所尝试的内容的代码段)他们错了)。
我可以肯定我的问题与报表服务器返回的数据的序列化/反序列化有关,但是我将承认我完全有可能对此表示错误。
我有两个单独的项目(在Visual Studio 2013中)。 “客户端”项目是WPF应用程序,正在尝试使用ReportViewer显示ServerReport的内容。 “服务”项目是WCF应用程序,在调用Microsoft的ReportServer之后,它试图将报告的内容返回给客户端项目。该软件的先前版本具有客户端软件,该客户端软件直接向报表服务器发出请求。我所做的更改是将请求的参数发送到服务项目,该服务项目从我们的数据库中获取身份验证信息,并调用报表服务器。目的是我们的应用程序的客户端不应仅对数据知道或访问身份验证信息。
我对实现这一目标的任何解决方案持开放态度,即使它与我到目前为止所设定的完全不同。
该应用程序从当前用户的数据中填充可用报告的列表。单击“查看”按钮后,应使用报告查看器显示报告的详细信息。
在视图按钮的click事件中,将在调用RefreshReport()之前填充报表服务器请求的参数。该代码未更改,不受新过程的影响。
public partial class CurrentReport : (Our base page object)
{
public ReportViewer _report;
private string _reportPath;
public CurrentReport()
{
try
{
InitializeComponent();
_report = new ReportViewer();
BuildReportViewer();
}
catch (Exception ex)
{
// Log Exception
}
}
public void BuildReportViewer()
{
try
{
// wfh is an WindowsFormsHost property which
// CurrentReport inherits from its parent
if (wfh.Child == null)
{
_report = new ReportViewer();
wfh.Child = _report;
}
catch (Exception ex)
{
// Log Exception
}
}
public bool RefreshReport(string reportPath, List<ReportParameter> parameters = null)
{
try
{
if ((parameters != null) && (!String.IsNullOrEmpty(reportPath)))
{
// Parameters passed to this method are of the type
// Microsoft.Reporting.WinForms.ReportParameter
// Parameters the cloud service is expecting are of the type
// Microsoft.Reporting.WebForms.ReportParameter
// The parameters accepted by the method are mapped to a list
// of parameters of web forms type before being added to
// the data transfer object
List<CloudService.Service.ReportParameter> cloudParameters = new List<CloudService.RTRService.ReportParameter>();
if (parameters.Count > 0)
{
foreach (ReportParameter rp in parameters)
{
List<object> cloudValues = new List<object>();
foreach (string s in rp.Values)
cloudValues.Add(s);
cloudParameters.Add(new CloudService.Service.ReportParameter { m_name = rp.Name, m_value = cloudValues, m_visible = rp.Visible });
}
}
CloudService.Service.ReportDTO rdto = new CloudService.Service.ReportDTO();
rdto.reportParameters = cloudParameters;
rdto.reportPath = reportPath;
rdto.reportProcessingMode = CloudService.Service.ProcessingMode.Remote;
ServiceRequests.ServiceRequests.service = new ServiceRequests.ServiceRequests(MyApp.Authentication);
MemoryStream stream = service.Report(rdto);
DataTable reportData = new DataTable { TableName = "Report" };
BinaryFormatter formatter = new BinaryFormatter();
reportData = (DataTable)formatter.Deserialize(stream);
_report.LocalReport.DataSources.Add(new ReportDataSource("Report", reportData));
_reportPath = reportPath;
_report.RefreshReport();
}
// The code making the call to this method is checking for an error
return false;
}
catch (Exception ex)
{
// Log Exception
}
}
public MemoryStream Report(ReportDTO rdto)
{
ServiceClient service = null;
try
{
service = new ServiceClient();
service.InnerChannel.OperationTimeout = new TimeSpan(0,5,0);
service.Open();
ReportDTORequest request = new ReportDTORequest();
request.Authentication = _authentication; // global property
request.Entities = new List<ReportDTO>();
request.Entities.Add(rdto);
return service.Report(request).Entities.FirstOrDefault();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (service != null)
{
service.Close();
}
}
}
[WebInvoke(Method = "POST")]
[OperationContract]
public Response<MemoryStream> Report(Request<ReportDTO> request)
{
Response<MemoryStream> response = new Response<MemoryStream>();
response.Status = ResponseStatus.FAILED;
try
{
if ((request != null) && (request.Entities != null))
{
if (request.Authentication != null)
{
// I know this part is unusual but it is working around a complication between an old custom response object and a new custom response object to replace the old one, which is still being used elsewhere
KeyValuePair<ResponseStatus, string> kvp = request.Authentication.Authenticate(_globalAuthenticationToken);
response.Status = kvp.Key;
response.Messages.Add(kvp.Value);
if (response.Status == ResponseStatus.SUCCESS)
{
ReportDTO rdto = request.Entities.FirstOrDefault();
if ((rdto != null) && (!String.IsNullOrEmpty(rdto.reportPath)))
{
// Get settings from database and populate in string variables username, password, domain, and uri
Microsoft.Reporting.WebForms.ReportViewer rv = new Microsoft.Reporting.WebForms.ReportViewer();
rv.ServerReport.ReportPath = rdto.reportPath;
rv.ServerReport.ReportServerUrl = new Uri(uri);
rv.ServerReport.ReportServerCredentials = new CustomReportCredentials(username, password, domain);
rv.ServerReport.Refresh();
if ((rdto.reportParameters != null) && (rdto.reportParameters.Count > 0))
{
rv.ServerReport.SetParameters(rdto.reportParameters);
}
string mimeType;
string encoding;
string extension;
string[] streamIDs;
Microsoft.Reporting.WebForms.Warning[] warnings;
byte[] bytes = rv.ServerReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamIDs, out warnings);
if ((bytes != null) && (bytes.Count() > 0))
{
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, bytes);
response.Entites.Add(stream);
stream.Close();
response.Status = ResponseStatus.SUCCESS;
}
else
{
response.Messages.Add("Unable to render server report");
foreach (Microsoft.Reporting.WebForms.Warning warning in warnings)
{
response.Messages.Add(warning.ToString());
}
response.Status = ResponseStatus.FAILED;
}
}
else
{
response.Messages.Add("Invalid request data");
response.Status = ResponseStatus.FAILED;
}
}
}
else
{
response.Messages.Add("Unable to authenticate user request");
response.Status = ResponseStatus.FAILED;
}
}
else
{
response.Messages.Add("Invalid request object");
response.Status = ResponseStatus.FAILED;
}
}
catch (Exception ex)
{
// Log Exception
}
return response;
}
reportData = (DataTable)formatter.Deserialize(stream);
行出现了我遇到的错误。
Binary stream '0' does not contain a valid BinaryHeader
。
rv.ServerReport.Render("Excel");
即可拨打电话
rv.ServerReport.Render
结果转换为DataTable的方式。
最佳答案
我认为Excel文件正在生成错误数据或垃圾数据。您会分享Excel内容吗
关于c# - 从WCF应用程序传递回WPF应用程序的ReportServer的byte []反序列化上没有BinaryHeader错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44762984/
有没有办法在另一个 WPF 窗口内托管 WPF 窗口。我有几个有点复杂的表格。但现在为了简化事情,我试图将其中一些合并为一个“仪表板”表单中的标签页。 请注意,我不是要托管 Windows 窗体,而是
WPF 特有的哪些方面和实践在非 WPF GUI 编程中最有用(并且并非难以实现)? 最佳答案 通过学习 WPF 命令,我了解了命令模式。它构成了 UI - 代码分离的基础,我认为应该在其他应用程序中
WinRT/Metro 正在获得一个新的 SemanticZoom控制,但我很难为 WPF 找到任何东西。 我不想为我的特定项目切换到 Metro,因为它不允许我制作窗口应用程序或跨多个显示器的多个实
我很难解决我的问题,我快要疯了。 想法是这样的:我有两个 ListView 元素,当一个元素从第一个列表掉落到第二个列表时,我需要打开一个对话,但我需要被掉落的元素的信息以及被添加以填充对话的元素。
如果我遵循TabControl,并且一切正常,当我切换到第二个Tabitem时,它显示就没有问题。 //datagrid //datagrid2 但是如果我有这个xaml,当我
在 Windows 窗体应用程序中,我们的数据 GridView 有很多事件,如行鼠标双击或行单击以及额外的...... 但是在 WPF 中我找不到这些事件。我如何将行鼠标双击添加到其中包含数据网格的
在这个项目中,代码 正确编译和执行 ;但是,我需要帮助解决两个问题: VS2012 WPF 设计器不适用于此 XAML 文件。它显示消息设计 View 对于 x64 和 ARM 目标平台不可用。 我收
目前我正在设计 WPF ScrollViewer,我发现了这个 Content="M 0 0 L 4 4 L 0 8 Z" 阅读 MSDN examples .现在我真的很想知道这意味着什么,但我无法
在 WPF 中,元素的可见性可以为“可见”,但实际上在屏幕上不可见,因为它的父元素(或父元素的父元素)具有折叠的可见性。 我希望能够知道一个元素是否实际呈现在屏幕上,而不必遍历可视化树检查父元素。 有
我应该使用 ApplicationCommands.Close用于关闭模式对话框还是该命令被认为是为关闭应用程序保留的?如果是后者,请大家创建Close每个命令 Dialog盒子或只是一个 Close
WPF 是否有任何可用的 piemenu 控件? 最佳答案 我在我的最爱中找到了这个,你可以看看: This 祝你今天过得愉快。 关于wpf - WPF 的菜单,我们在Stack Overflow上找
我正在尝试使用 WrapPanel 和两个 TextBlock 将星号 (*) 附加到某些文本的左侧,允许文本换行,并强制文本右对齐。通过创建一个 FlowDirection 设置为 RightToL
这里是场景(简化):我在Window上有一个控件(比如说一个Rectangle)。我迷上了MouseMove事件,以使其启动拖放操作。然后在MouseDown事件中进行动画处理,向右移动50个像素。但
我有一个 ListView ,它的项目来源是一个列表。我希望用户只选择一项。当我将 listview 的 SelectionMode 设置为 single 时,用户仍然可以选择多个项目,并且似乎 li
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
INotifyPropertyChanged 的目的是什么。我知道每当更改属性时都会触发此事件,但是 View /用户界面如何知道触发了此事件: 这是实现 INotifyPropertyChang
我正在查看工具箱中的 WPF 组件,但找不到 2005/2008 中存在的错误提供程序。 被移除了吗? 最佳答案 ErrorProvider是一个 Winforms 控件。 WPF 中没有等效项。但是
我试图在单击和双击 wpf Image 控件时有不同的行为。不幸的是,单击首先被触发,因此双击被忽略。 最佳答案 如果您改用 MouseDown 事件,则它在 EventArgs 中为 ClickCo
这可能吗? 我使用了一个框架控件并且:显示(例如:showwindow.xaml) 但是我得到这个错误: root element is not valid for navigation 最佳答案 确
我在蓝色背景的窗口上放置了一个扩展器,我想让扩展器的按钮与默认颜色不同(蓝色,它是从窗口接收的)。当我修改扩展器的背景属性时,它会将整个扩展器、标题和全部更改为新颜色。但是,我只想更改按钮本身。谁能指
我是一名优秀的程序员,十分优秀!