Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reporting services 对于不同的请求,SSRS StreamID和图表图像以相同的id呈现_Reporting Services_Ssrs 2008 - Fatal编程技术网

Reporting services 对于不同的请求,SSRS StreamID和图表图像以相同的id呈现

Reporting services 对于不同的请求,SSRS StreamID和图表图像以相同的id呈现,reporting-services,ssrs-2008,Reporting Services,Ssrs 2008,是否有人知道报告定义中是否有一种方法可以强制每个请求的报告图像使用唯一的streamid。在这种情况下,我通过ReportExecutionsService web api将报表呈现为字节[]。每当报告有图像时,SSRS将为每个图像提供一个streamid,我需要将零件保存到客户机可以访问的临时web文件夹中 当我将图表放在报表上时,streamID永远不会更改,这导致浏览器中出现缓存问题。无论参数如何,都会显示相同的图表,但是,我可以查看服务器上的临时文件,并查看图表是否已更新。发布可行的解决

是否有人知道报告定义中是否有一种方法可以强制每个请求的报告图像使用唯一的streamid。在这种情况下,我通过ReportExecutionsService web api将报表呈现为字节[]。每当报告有图像时,SSRS将为每个图像提供一个streamid,我需要将零件保存到客户机可以访问的临时web文件夹中


当我将图表放在报表上时,streamID永远不会更改,这导致浏览器中出现缓存问题。无论参数如何,都会显示相同的图表,但是,我可以查看服务器上的临时文件,并查看图表是否已更新。

发布可行的解决方案,以防有人感兴趣

A.计算控制器方法中到临时文件夹的物理和虚拟映射。 a注意:对于带有图表的报告,您应该为每个报告请求创建一个文件夹。我用过:

private string GetVirtualTempFolder()
{
    if (Url != null)
        return Url.Content("~/Temp/");
    else
        return VirtualPathUtility.ToAbsolute("~/Temp/");    
}

private string GetPhysicalTempFolder()
{
    return AppDomain.CurrentDomain.BaseDirectory + @"Temp\";
}

B.将目录名传递到reporting services包装层。我正在使用DI,因此需要修改签名

C.在ReportingServices呈现api中,您可以通过DeviceInfo接口传递所选虚拟目录,以提取与流关联的临时文件

D.streamid在Render方法中返回。迭代并将其保存到计算的物理位置

虽然我已经有了临时文件夹功能,但我必须添加根据请求选择性创建临时位置的功能

string virtualTempFolder = "";
string physicalTempFolder = "";
if (makeUniqueTempFolder)
{               

    virtualTempFolder = this.GetVirtualTempFolder();           
    physicalTempFolder = this.GetPhysicalTempFolder();
    string unique = Guid.NewGuid().ToString();
    virtualTempFolder = virtualTempFolder + unique + "/";
    physicalTempFolder = physicalTempFolder + unique + "/";
    System.IO.Directory.CreateDirectory(physicalTempFolder);
}