Программный доступ на основе WCF к веб-службам SQL Server Reporting Services 2010 - PullRequest
4 голосов
/ 22 мая 2011

Ранее мы разрабатывали веб-сервис ReportServer / ReportService2005.asmx.

Чтобы получить доступ к этим веб-службам, в документации MSDN предлагаются старые справочные технологии на основе .NET 2.0. Но мы специально решили использовать технологию WCF (System.ServiceModel) для доступа к этому сервису. Независимо от того, используете ли вы .NET 2.0 WSDL или ссылки на службы WCF, в обоих случаях создаются прокси-классы для переноса методов веб-службы. Примечательно, что сами прокси-классы будут иметь разные (но функционально равные) реализации. Ссылка: http://msdn.microsoft.com/en-us/library/ms155134.aspx

Мы добились больших успехов с сервисным прокси на основе WCF по сравнению с ReportService2005 (для SSRS 2008). Недавно нас попросили сделать то же самое, но использовать новую веб-службу ReportService2010 (для SQL Server 2008 R2), поскольку старые службы ReportService2005.asmx / ReportService2006.asmx устарели. Ссылка: http://msdn.microsoft.com/en-us/library/ms154052.aspx

Для контекста: службы ReportService2006.asmx предназначены для использования SSRS в режиме Sharepoint Integrated - предположительно, это главным образом связано с безопасностью (аутентификация / авторизация).

В самых простых сроках новые сервисы ReportService2010.asmx представляют собой объединение старых сервисов ReportService2005.asmx и ReportService2006.asmx, и теперь вы можете использовать сервисы ReportService2010.asmx для «Native» или «SharePoint Integrated». "scanarios.

После всего этого у меня вопрос: что еще отличается на уровне API? PS: я также обнаружил, что SSRS2008R2 больше не поддерживает использование Anonymous Например, я заметил, что в старых сервисах, используемых для указания, что режим безопасности клиента WCF был установлен для «TransportCredentialOnly» с использованием NTLM и передачей имени пользователя из ClientCredentials. В отличие от этого, в новых службах 2010 года режим безопасности клиента WCF теперь установлен на «Нет», и сообщение все еще содержит имя пользователя, но без какой-либо транспортной безопасности (например, NTLM).

Хорошо, поэтому я начинаю догадываться, что процесс интеграции сервисов 2005/2006 (который, вероятно, использовал разные механизмы аутентификации) приводит к этому изменению, которое мы видим.

Это, однако, имеет прямое влияние на код API в том смысле, что ранее вы указывали учетные данные для прокси-сервера клиента следующим образом:

proxy.ClientCredentials.ClientCredential = yourCredential;

Это больше не кажется актуальным. Я также заметил, что многие методы прокси-службы теперь ожидают экземпляр TrustedUserHeader в качестве первого параметра. Например:

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

Из некоторой документации, похоже, он реализован как заголовок SOAP. Этот объект TrustedUserHeader содержит такие свойства, как UserName, UserToken, AnyAttr и т. Д., Но я не уверен, каков правильный шаблон использования. К сожалению, документация MSDN в равной степени бесполезна, поскольку я не смог найти четкого руководства по этому вопросу, равно как и документация MSDN не использует WCF ServiceModel для доступа к сервисам.

Может ли кто-нибудь рассказать, как правильно теперь использовать новый интерфейс служб Reporting Services 2010? Должен ли я больше не устанавливать свойство «ClientCredentials», а вместо этого создать и экземпляр «TrustedUserHeader»

Большое спасибо! * Jaans 1037 *

...