您如何从SSIS包中调用SSRS Soap?

时间:2019-05-09 18:20:53

标签: reporting-services ssis

我正在处理来自SQL Server的数据,我将这些数据转换为文本文件,然后上传到SSRS文件夹。

我尝试使用Web服务任务组件,但失败。

有什么办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,这里是脚本任务中的代码,以及如何连接到SSRS并上传文件。这是一种接受字节数组并使用用于运行ssis程序包的默认凭据上传到SSRS的方法,当然,该凭据也应该可以访问ssrs或您打算在其中上传文件的ssrs中的特定文件夹。

protected bool UploadFile(byte[] data, string description)
    {


        var result = false;
        try
        {
            if (data != null)
            {
                var fileName = string.Format("{0}_{1}_{2}{3}.zip", ZipPrefix, TargetDate, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"));
                var prefix = string.Format("{0}_{1}", ZipPrefix, TargetDate);

                ServiceManager.ReportingService2010 rs = new ServiceManager.ReportingService2010
                {
                    Url = ServiceUrl,
                    RequestEncoding = Encoding.UTF8,
                };

                rs.Credentials = System.Net.CredentialCache.DefaultCredentials;

                ServiceManager.Property[] properties = {
                    new ServiceManager.Property() { Name = "MimeType", Value = "application/zip" }
                    ,new ServiceManager.Property(){ Name ="Description", Value = description}
                };

                var listItems = rs.ListChildren(SSRSFolder, false);

                //var a = string.Join(", ", listItems.Select(x => x.Name));
                //MessageBox.Show(a);

                foreach (var item in listItems)
                {
                    if (item.Name.Contains(prefix))
                    {
                        rs.DeleteItem(item.Path);
                    }
                }

                rs.CreateCatalogItem("Resource", fileName, SSRSFolder, false, data, properties, out ServiceManager.Warning[] warnings);

                result = true;
            }
        }
        catch (Exception e)
        {
            ErrorMessage = string.Format("Upload Error : {0}", e.Message);

            Dts.Log(e.Message, 1, null);
            throw new Exception(e.Message);
        }

        return result;
    }
    #endregion

请注意,我们需要向SSRS Soap添加服务引用。