在这里回答我自己的问题,希望其他人可能会觉得这很有用:
我的(错误)印象是,赋予服务器上数据源的唯一“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>
现在这工作了一次,当我的数据源确实被称为“MyDataSource”并且与我通过 RS WebService API 发布的报告位于同一目录中时。
一旦我将数据源移到其他地方,它就停止了工作。
解决方案:
这听起来可能很愚蠢,但一开始我真的没有“明白”: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>
)
从那一刻起,它就像一种魅力。
希望有一天有人会发现这很有用!