SSRS не отображает изображения из локальной среды SharePoint ⇐ C#
SSRS не отображает изображения из локальной среды SharePoint
В последнее время я работал над решением, которое позволило бы файлам .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, которых у меня нет в распоряжении.
Любая помощь будет принята с благодарностью. Спасибо!!
В последнее время я работал над решением, которое позволило бы файлам .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, которых у меня нет в распоряжении.
Любая помощь будет принята с благодарностью. Спасибо!!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Отчет SQL Server Services Services (SSRS) отображает пустое пространство [закрыто]
Anonymous » » в форуме C# - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-