4

以前我们针对 ReportServer/ReportService2005.asmx Web 服务进行了开发。

要访问这些 Web 服务,MSDN 文档建议使用旧的基于 .NET 2.0 的 Web 服务参考技术。但是我们特别选择使用WCF(System.ServiceModel)技术来访问这个服务。无论您使用 .NET 2.0 WSDL 还是 WCF 服务引用,在这两种情况下都会生成代理类来包装 Web 服务方法。值得注意的是,代理类本身将具有不同(但功能相同)的实现。参考:http: //msdn.microsoft.com/en-us/library/ms155134.aspx

我们在针对 ReportService2005(针对 SSRS 2008)的基于 WCF 的服务代理方面取得了巨大成功。最近,我们被要求做同样的事情,但要使用新的 ReportService2010 Web 服务(用于 SQL Server 2008 R2),因为旧的 ReportService2005.asmx/ReportService2006.asmx 服务已被弃用。参考:http: //msdn.microsoft.com/en-us/library/ms154052.aspx

对于上下文: ReportService2006.asmx 服务旨在在 Sharepoint 集成模式下使用 SSRS - 大概这主要与安全性(身份验证/授权)有关。

用最简单的术语来说,新的 ReportService2010.asmx 服务是旧 ReportService2005.asmx 和 ReportService2006.asmx 服务的合并,您现在可以将 ReportService2010.asmx 服务用于“本机”或“SharePoint Integrated”扫描仪。

毕竟,我的问题是 API 级别还有什么不同?PS:我还发现 SSRS2008R2 不再支持Anonymous使用例如,我注意到在旧服务中,用于指定 WCF 客户端安全模式使用 NTLM 设置为“TransportCredentialOnly”并从 ClientCredentials 传递您的用户名。相比之下,新的 2010 服务现在将 WCF 客户端安全模式设置为“无”,并且消息仍包含用户名,但没有任何传输安全性(如 NTLM)。

好的,所以我开始猜测集成 2005/2006 服务(可能使用不同的身份验证机制)的行为会导致我们看到的这种变化。

但是,这对 API 代码有直接影响,因为以前您将按如下方式指定客户端代理的凭据:

proxy.ClientCredentials.ClientCredential = yourCredential;

这似乎不再相关。我还注意到许多代理服务方法现在都需要一个TrustedUserHeader实例作为第一个参数。例如:

proxy.CreateFolder( yourTrustedUserHeader, folder , ... );

从一些文档来看,它似乎是作为 SOAP Header 实现的。此 TrustedUserHeader 对象包含 、 、 等属性UserNameUserTokenAnyAttr我不确定正确的使用模式是什么。不幸的是,MSDN 文档同样没用,因为我找不到关于这个问题的明确指导,MSDN 文档也没有使用 WCF ServiceModel 来访问服务。

任何人都可以就现在使用新的 Reporting Services 2010 界面的适当方式提供一些见解吗?我是否应该不再设置“ClientCredentials”属性,而是创建“TrustedUserHeader”的实例

非常感谢!雅恩斯

4

0 回答 0