Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. Начну из далека. Есть сайт (WebForms), он работает и продолжает развиваться. Кто то забивает данные, а кто их видит в удобном оформлении. Короче говоря - статистика. И вот развитие дошло до этапа когда клиент хочет эти данные у себя в Excel_е видеть. И вот тут начинается.... Ругается в этом месте: ... Imports Microsoft.Office.Interop.Excel Imports Excel = Microsoft.Office.Interop.Excel ... Dim excelApp As New Microsoft.Office.Interop.Excel.Application() <- на эту строку указывает. ... Текст ошибки: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))..... Не привожу весь текст ошибки, да бы не утомлять читателя. Если я правильно понял гугл, ошибка говорит о том, что у клиента, который хочет перетащить данные в Excel нет прав на работу с ним (с Excel_ем). Решение напрашивается само сабой. Так возьми и дай ему эти права. Проблема вся в том, что я не знаю кому довать эти права. Наверно будете смеятся, но не торопитесь. Начал разбираться с клиентом. Прочитать под каким именем работает клиент не получилось. User.Identity.Name и HttpContext.Current.User.Identity.Name возвращают пустое значение. И частично это объяснимо. В файле Web.config указано: Код: plaintext 1. 2. 3. Т.е. авторизация идет через указанный логин и пароль, должна идти... Но на сайте эта авторизация не используется. Да! Указана! Но не используется. Сделана доморощенная авторизация. Почему? Наверно на то есть оправдания. Количество пользователей не более двухсот. Логины и пароли назначены им один раз и по жизни. Это связано не с личными качествами клиента, а с той должностью которую он занимает. Реорганизация предприятий вещь не частая. Там и роли, там и права и обязанности все учтено. Вообщем получается так, что IIS о них ни чего не знает. Точнее знает, но они для него все на одно лицо. А вот я об этом лице ни чего не знаю. Догадываюсь, что это IUSRS (у меня IIS7.0), так называемый Anonymus . Но прочитать я его не могу. Почему? И второе. Если это анонимный пользователь, то как его тогда прописать в DCOM - MS ExcelApplication. Ведь он (DCOM) не знает о тех, кого создает IIS. Значить надо прописывать пользователя в системе (Win.server 2008), прописывать его в DCOM с правами и прописывать его в IIS как анонимного пользователя (что бы сайт продолжал работать без внесения изменений в плане авторизации и Excel мог запускаться). Подскажите правильный ход мыслей у меня? Или выдаю желаемое за действительное. Растолкуйте пожалуйста. Или куда копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 06:14 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Vlad5780, Чтобы работать с Excel на стороне сервера, нельзя использовать Interop, ну категорически нельзя. Попробуй стороннюю библиотеку, например, ClosedXML ( NuGet ). И подобных проблем у тебя больше не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 07:45 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Vlad5780, "выдаю желаемое за действительное" - это мягко сказано. Куда копать? Смотря в чём хотите разобраться. Если в том, как работает IIS, то сюда: Application Pool Identities . Если в том, как лучше данные выгрузить в Excel, то в направлении, предложеном hVostt. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2016, 08:43 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
hVostt, спасибо, заработало. И если не трудно. Подскажи, как все таки посмотреть под каким именем работает пользователь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 08:16 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Vlad5780hVostt, спасибо, заработало. И если не трудно. Подскажи, как все таки посмотреть под каким именем работает пользователь? Обычно любой пользователь (точнее если быть, то все) работает в приложении под именем типа "IIS AppPool\<PoolName>", где <PoolName> это наименование пула (для приложения по умолчанию, это DefaultAppPool). Пользователь имеет очень ограниченные права, поэтому приложение не может перезаписать файлы приложения (бинарники, вьюхи, конфиги и прочее), что положительно сказывается на безопасности, и не стоит это менять без очень веской причины. Более подробно по ссылке, которую тебе скинул skyANA, о других способах аутентификации можешь нагуглить, информации в сети предостаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2016, 09:54 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Обращаюсь еще за помощью. Логическое продолжение начатой темы. Файлы Excel создаются и это радует. Но моя задача: не сохраняя их на сервере отправлять клиенту. Точнее клиент на страничке жмет на кнопку и ему прилетает Excel_файл. Лучше который спросит "Открыть" "Сохранить" и т.д. С инета перепробовал уже с десяток примеров, но как то все не работает. Приведу последний вариант, скажите, что не так? Protected Sub Button3_Click(sender As Object, e As System.EventArgs) Handles Button3.Click 'Создаю простую табличку (три столбца и три строки) Using dt As New DataTable() dt.Columns.Add("One") dt.Columns.Add("Two") dt.Columns.Add("Three") dt.Rows.Add("Piter", 12, 13) dt.Rows.Add("Nikola", 22, 23) dt.Rows.Add("Elen", 32, 33) 'На основе полученной таблицы создаем Excel файл. 'Если раскомментировать строку <wb.SaveAs("C:\InetPub\wwwroot\Proba.xlsx")>, файл успешно сохраняется на диске (на сервере) Using wb As New XLWorkbook() wb.Worksheets.Add(dt, "Customers") 'wb.SaveAs("C:\InetPub\wwwroot\Proba.xlsx") Response.Clear() Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" Response.AddHeader("content-disposition", "attachment; filename=C:\InetPub\wwwroot\Proba.xlsx") Using memoryStream As MemoryStream = New MemoryStream() wb.SaveAs(MemoryStream) MemoryStream.WriteTo(Response.OutputStream) MemoryStream.Close() Response.End() End Using End Using End Using End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 07:45 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Vlad5780, После того, как ты сделал wb.SaveAs(MemoryStream) необходимо вернуть позицию текущего элемента в начало MemoryStream.Seek(0, SeekOrigin.Begin) Потом можно уже писать в респонз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 08:37 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
hVostt, сделал как сказал: Код: html 1. 2. 3. 4. 5. 6. 7. Но, так же, ни чего не происходит. Может еще какие варианты есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 09:09 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Vlad5780, Ты должен кроме ContentType ещё задать ContentLength, потому что размер данных указывается в заголовке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 12:16 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Библиотека от SyncFusion. Настраивается с полпинка. Есть примеры. Очень удобно. Данные с клиента (Angular) улетают на сервер и обратно прилетает уже XLSX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 12:29 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Monochromatique, Кендовский грид вообще эксель прям в браузере генерит, с сервака только данные поттягиваются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 16:25 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
hVosttVlad5780, Ты должен кроме ContentType ещё задать ContentLength, потому что размер данных указывается в заголовке. и Content-Disposition ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 16:57 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВи Content-Disposition Этот заголовок уже есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2016, 20:30 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
hVostt Ты должен кроме ContentType ещё задать ContentLength, потому что размер данных указывается в заголовке. Совсем перестал, что-то понимать. Добавил ContentLength, как ты сказал. Ошибка при компиляции: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. А в инете в примерах у Response есть такое свойство ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 09:52 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
hVosttMonochromatique, Кендовский грид вообще эксель прям в браузере генерит, с сервака только данные поттягиваются. Даже если клиентский комп вообще ничего про EXCEL не знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 11:31 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
MonochromatiquehVosttMonochromatique, Кендовский грид вообще эксель прям в браузере генерит, с сервака только данные поттягиваются. Даже если клиентский комп вообще ничего про EXCEL не знает? Да. Эксель генерится прямо в браузере средствами JavaScript без всяких сильверлайтов, флешей и апплетов. Настоящий эксель, а не CSV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 16:50 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Vlad5780Совсем перестал, что-то понимать. Добавил ContentLength, как ты сказал. Ошибка при компиляции: Код: c# 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2016, 16:52 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
hVostt, добавил ("Content-Length", РазмерФайла), результат тот же. hVostt, может у тебя есть какой нибудь рабочий пример? Можешь выложить? Только пожалуйста не ссылки на ресурсы. Я их уже с сотню перепробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2016, 12:21 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
Vlad5780, вот из какого-то старого простенького проекта, это точно работало Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. manager.Download записывает содержимое файла в Response.OutputStream ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2016, 12:48 |
|
||
|
Аутентификация и Excel
|
|||
|---|---|---|---|
|
#18+
hVostt, спасибо большое за помощь. Все получилось. Оказывается оно давно заработало. Проблема была в том, что кнопка для экспорта в Excel находилась внутри UpdatePanel и нужно было всего лишь задать PostBackTrigger. Чуть крыша не поехала пока до причины добрался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2016, 09:13 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=39359184&tid=1355648]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 351ms |

| 0 / 0 |
