我们目前有SSRS报告使用需要使用呼叫用户凭据的WCF服务数据。在服务方面,我们使用基本绑定来托管服务:
<binding name="TheBasicHttpBinding" maxReceivedMessageSize="50000000" transferMode="Streamed">
<readerQuotas maxArrayLength="50000000"/>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
<service behaviorConfiguration="DefaultServiceBehavior" name="Web.TheService">
<endpoint binding="basicHttpBinding" bindingConfiguration="TheBasicHttpBinding" name="ServiceHttpBinding"
contract="Web.ITheService"/>
</service>
在报告开发期间,我们设置了所有报告使用的共享数据源。数据源的类型为&#34; XML&#34;并指向服务端点.svc文件。在我们的每个数据集中,我们提出如下请求:
<Query>
<Method Name="GetReferenceData" Namespace="http://localhost/2009/TheService">
<Parameters>
<Parameter Name="type"></Parameter>
</Parameters>
</Method>
<SoapAction>http://localhost/2009/TheService/ITheService/GetReferenceData</SoapAction>
</Query>
当使用下面的配置和调用调用远程托管的WCF服务时,我们的报告可以在VS2008中的开发机器上工作。
此外,我们的报告在登录SSRS报告服务器时运行它们并在IE中的SSRS报告服务器上直接运行它们。
但是,如果我们远程访问SSRS报告链接(不是坐在SSRS服务机器上),我们会收到错误:
报告处理期间发生错误。 (rsProcessingAborted) 共享数据集&#39;客户端执行失败。 (rsDataSetExecutionError) 数据集的查询执行失败&#39;&#39;。 (rsErrorExecutingCommand) 无法执行指定URL的Web请求。未经授权:远程服务器返回错误:(401)未经授权。 (rsXmlDataProviderError) 远程服务器返回错误:(401)未经授权。 401 - 未授权:由于凭据无效,访问被拒绝。
服务器错误
401 - 未经授权:由于凭据无效,访问被拒绝。
您无权使用以下凭据查看此目录或页面你提供了。
---内部异常堆栈跟踪结束--- 在Microsoft.ReportingServices.DataExtensions.XmlDP.InMemoryCommand.ExecuteWebRequest(ICredentials凭据) 在Microsoft.ReportingServices.DataExtensions.XmlDP.InMemoryCommand.Execute() 在Microsoft.ReportingServices.DataExtensions.XmlDP.InMemoryCommand。&lt;&gt; c__DisplayClass1.b__0() 在Microsoft.ReportingServices.DataExtensions.XmlDP.WebRequestHelper.ExecuteServerCallAsNtUser(ServerCall serverCall,WindowsIdentity ntUser) 在Microsoft.ReportingServices.DataExtensions.XmlDP.InMemoryCommand.ExecuteReader(CommandBehavior behavior) 在Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.RunEmbeddedQuery(Boolean&amp; readerExtensionsSupported,Boolean&amp; readerFieldProperties,List
1 queryParams, Object[] paramValues) --- End of inner exception stack trace --- at Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.RunEmbeddedQuery(Boolean& readerExtensionsSupported, Boolean& readerFieldProperties, List
1 queryParams,Object [] paramValues) 在Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.RunDataSetQueryAndProcessAsIRowConsumer(Boolean processAsIRowConsumer) 在Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.Process() 在Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.ProcessConcurrent(Object threadSet) ---内部异常堆栈跟踪结束--- 在Microsoft.ReportingServices.ReportProcessing.ReportProcessing.ProcessSharedDataSet(DataSetContext dc,DataSetDefinition dataSetDefinition) 在Microsoft.ReportingServices.Library.SharedDataExecutionInstance.CreateDataChunk(IChunkFactory targetChunkFactory,String dataChunkName) 在Microsoft.ReportingServices.Library.SharedDataExecutionInstance.Execute(DataSetInfo dataSet,String targetChunkNameInReportSnapshot,ParameterInfoCollection dataSetParameterValues,ReportProcessingContext originalProcessingContext,Boolean originalRequestNeedsDataChunk,IRowConsumer originalRequest) at Microsoft.ReportingServices.Library.SharedDataSetExecution.Process(DataSetInfo sharedDataSet,String targetChunkNameInReportSnapshot,Boolean originalRequestNeedsDataChunk,IRowConsumer originalRequest,ParameterInfoCollection dataSetParameterValues,ReportProcessingContext originalProcessingContext) 在Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.GetSharedDataSetChunkAndProcess(Boolean processAsIRowConsumer,DataSetInfo dataSetInfo,ParameterInfoCollection datasetParameterCollection) 在Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.RunDataSetQueryAndProcessAsIRowConsumer(Boolean processAsIRowConsumer) 在Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.Process() 在Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.ProcessConcurrent(Object threadSet) ---内部异常堆栈跟踪结束---;
为什么我们的报告在VS2008中调用我们的远程WCF服务的任何想法,并且报告在直接在带有IE的SSRS服务器上运行时工作正常,但是当在SSRS上托管这些相同的报告URL时机器我们得到这个报告处理错误?
为了能够从SSRS服务器访问WCF服务WSDL,我们必须将我们的WCF服务的机器URL添加到本地Intranet区域列表,以便我们不会因为凭据而受到质疑。当我们删除这些条目时,即使在SSRS报告上直接在SSRS机器上运行它们,我们也不会取得成功。我们假设问题在于将用户凭据传递给SSRS并建立后续数据源URL连接的方式。
我们的数据源使用&#34; Windows集成安全性&#34;我们在VS中成功运行的帐户与我们在SSRS报表服务器上直接成功运行IE的帐户相同。此外,这是我们在尝试从远程计算机上的IE访问SSRS报告时获得上述异常的帐户。
之前有人遇到过这样的事情或有任何想法吗?我们查看了SSRS日志,但还没有发现它们有用。请注意,我们需要在实际最终用户凭据下运行报告,因为这些凭据需要传递到WCF服务,我们根据权限显示/过滤数据。
设置&#34;凭据安全地存储在报表服务器中&#34;如果存储我自己的帐户(我用于其他成功的测试),则远程链接适用于所有人。但是,这会产生问题,因为所有WCF / XML请求都在我的凭据上下文中使用。我们需要使用&#34; Windows集成安全性和#34;在主叫用户的上下文下。这个问题引入的另一个问题是,如果我将我的凭据存储在报告中,它是否适用于所有远程用户和我自己,但是在将数据源设置为&#34; Windows集成安全性时#34;它甚至不适合我 - 相同的凭据。
更新
这似乎是&#34;双跳&#34;问题可能是我们遇到的问题:Integrated Security on Reporting Services XML Datasource。
我发现哪些文章看起来有同样的问题: