在这里回答我自己的问题,希望其他人能发现这一点:
我有一种(错误的)印象,给服务器上的数据源提供的唯一“datasourceid”足以唯一地标识它。
因此,在我生成的RDL中,我有如下内容:
<DataSources>
<DataSource Name="MyDataSource">
<Transaction>true</Transaction>
<DataSourceReference>MyDataSource</DataSourceReference>
<rd:DataSourceID>6ba7c588-e270-4de9-988c-d2af024f10e1</rd:DataSourceID>
<rd:SecurityType>None</rd:SecurityType>
</DataSource>
</DataSources>
当我的数据源确实被称为“my data source”并且与我通过RS WebServiceAPI发布的报告位于同一目录时,这个方法曾经奏效过。
我一把数据源移到别处,它就停止工作了。
解决方案:
这听起来可能很傻,但我一开始真的没有“理解”它:这个
DataSourceReference
需要在报表服务器上有完整的“路径”,指向我要引用的数据源。仅仅指定唯一的ID是不行的……
所以一旦我把RDL改为:
<DataSources>
<DataSource Name="MyDataSource">
<Transaction>true</Transaction>
<DataSourceReference>/MyProject/DataSources/MyDataSource</DataSourceReference>
<rd:DataSourceID>6ba7c588-e270-4de9-988c-d2af024f10e1</rd:DataSourceID>
<rd:SecurityType>None</rd:SecurityType>
</DataSource>
</DataSources>
(注意
<DataSourceReference>/MyProject/DataSources/MyDataSource</DataSourceReference>
)
从那一刻起,它就像一种魅力。
希望有人有一天会发现这个有用!