SSRS не отображает изображения из локальной среды SharePointC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 SSRS не отображает изображения из локальной среды SharePoint

Сообщение Anonymous »


В последнее время я работал над решением, которое позволило бы файлам .rdlc со страницы ASP.NET Webforms отображать изображения, хранящиеся в SharePoint. Локальный сервер, работающий отдельно от веб-сайта интрасети компании. До добавления SharePoint в домен старые изображения файлов .rdlc загружались путем выдачи себя за фиктивного пользователя (жестко закодировав его имя пользователя и пароль в статическую переменную C#, использующую advapi32). библиотека) для просмотра файлов в общей сетевой папке SMB.

Сначала я рассматривал возможность использования REST API SharePoint для получения данных. Следуя официальной документации, я намеревался использовать HttpWebRequest с токеном OAuth или Bearer, но затем задался вопросом, можно ли использовать NTLM для аутентификации пользователей с помощью NTLM код>Веб-клиент. Ошибочно предполагая, что NTLM будет работать, используя учетные данные пользователя, вошедшего на клиентский компьютер, я нашел следующее решение:

с использованием системы; использование System.Data; использование System.Net; ... protected void ProcessedImageBytes (строка uri, DataTable imagesTable) { байт [] imageBytes; используя (var webClient = новый WebClient()) { webClient.Credentials = CredentialCache.DefaultCredentials; // Переменная uri — это просто ссылка на файл SharePoint. imageBytes = webClient.DownloadData(uri); } DataRow newRow = imagesTable.NewRow(); newRow["PictureBytes"] = Convert.ToBase64String(imageBytes); imagesTable.Rows.Add(newRow); } Отсюда программа берет текст DataRow и передает его в ReportDataSource для самого отчета.

Чего я не понял, так это того, что CredentialCache.DefaultCredentials на самом деле проверяет личность хост-компьютера и авторизует WebClient оттуда. Это означало, что во время моего тестирования, когда я запускал этот отчет с моего ПК, отчет загружался как положено, поскольку удостоверение было установлено для моего профиля, и у меня был доступ к папке SharePoint, но удостоверение, используемое хост-сервером веб-сайта, было NT AUTHORITY\NETWORK SERVICE, как я обнаружил, вписав WindowsIdentity.GetCurrent() в код активной страницы.

На данный момент я не уверен, в каком направлении двигаться. Я хотел бы разрешить нашей системе отображать изображения из ссылок SharePoint с помощью NTLM, но, похоже, единственный способ сделать это — еще раз записать имя пользователя и пароль необходимого пользователя непосредственно в код C#. Многие из решений, о которых я читал, поддерживаются SharePoint Online с использованием Azure AD и/или Microsoft Graph, которых у меня нет в распоряжении.

Любая помощь будет принята с благодарностью. Спасибо!!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»