Как мне прочитать текстовый файл на том же сервере с ASP.NET? - PullRequest
0 голосов
/ 02 июня 2009

Решение:

Оказывается, я не проверял путь, который он искал, довольно глупо с моей стороны. После того как я разобрался с этой проблемой и исправил неправильный путь, чтение работало нормально. Все еще сбит с толку проблемой MSSQL, поскольку статьи в среднем занимают менее 10 000 байт.


Пояснение:

Я не уверен, что у некоторых из вас сложилось впечатление, что файл, который я пытаюсь прочитать, находится на моей локальной машине. Он находится в Интернете на том же сервере, что и скрипт, который к нему обращается. Просто в другом каталоге.


Я написал онлайн-справочное приложение, которое включает статьи. Одна проблема, с которой я столкнулся некоторые статьи слишком длинные и обрезаются, когда я помещаю их в свою базу данных MSSQL. Я попытался использовать TEXT и VARCHAR(MAX) в качестве типа данных, но он все равно будет обрезан.

Поэтому я решил поместить слишком длинные статьи в текстовый файл, и мое приложение прочитало текстовый файл оттуда. Я получил этот код, работающий в моей среде разработки, но он не работает вживую:

Dim output As String = String.Empty
Try
    Dim theArticle As gsClassroom = classArticles(iterate)
    If theArticle.Body.StartsWith("/docs/") Then
        Dim oReader As IO.StreamReader = Nothing
        Try
            oReader = New IO.StreamReader(Server.MapPath(String.Format("/dev{0}", theArticle.Body)))


        Catch ex As Exception
            output = String.Format("{0}<br /><br />{1}", ex.Message, "internal")
        Finally
            oReader.Close()
            oReader.Dispose()
            oReader = Nothing
        End Try
    Else
        output = theArticle.Body
    End If
Catch ex As Exception
    output = String.Format("{0}<br /><br />{1}", ex.Message, "external")
End Try
Response.Output.WriteLine(output)

Сначала я подумал, что это потому, что я не изменил префикс пути /dev на /hlpdsk. Но даже после того, как я изменил его, он взорвался. Что я делаю не так?

Ответы [ 4 ]

2 голосов
/ 02 июня 2009

Первое, что приходит мне на ум в связи с такими проблемами, - это настройки разрешений в вашей производственной среде, которые не позволят вам получить доступ к этому каталогу.

1 голос
/ 02 июня 2009

Причина, по которой он потерпел неудачу, - это разрешения, как говорит Мэтью. Когда вы разрабатываете в VS, вы обычно запускаете с использованием встроенного веб-сервера Visual Studio. При запуске этого веб-сервера он работает под разрешениями вашей учетной записи, что означает, что у вас есть доступ практически ко всему на локальном ПК.

При развертывании в рабочей среде вы работаете в IIS, и разрешения безопасности соответствуют пулу приложений, в котором выполняется ваше приложение. По умолчанию AppPool запускается под учетной записью NetworkService, что означает минимальный доступ к локальным ресурсам на вашем ПК.

Вы можете повысить разрешения AppPool, но это плохая практика и угроза безопасности. Гораздо лучший подход, как уже было сказано, заключается в правильном использовании типов данных, доступных в SQL Server, для хранения ваших данных.

1 голос
/ 02 июня 2009

Какие статьи службы поддержки имеют длину более 2 ^ 31-1 байт? (Лимит varchar (max))

Статья, которая долго загружалась, чтобы люди могли предположить, что веб-сайт сломан и сдался. Не так ли?

1 голос
/ 02 июня 2009

Я знаю, что вы хотите решить проблему чтения этого текстового файла, но я бы посоветовал вам вернуться к чтению текста из таблицы сервера sql с помощью Varchar (MAX).

Обратите внимание, что если размер текста превышает несколько КБ, он разбивает его на несколько результатов. Таким образом, при чтении вам придется читать из datareader и записывать в построитель строк. Когда это будет сделано, у вас будет полный контент в строителе строк.

Что касается чтения файлов, не делайте этого. Было бы много проблем с разрешениями файлов в среде сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...