Обеспечение больших загрузок Используя C# и IIS 7

Вот установка:

  • 1 веб-сервер, запускающий приложение C#, в котором мои пользователи (сохраненный в базе данных MySQL по упомянутому серверу) аутентифицируют.

  • 1 файловый сервер под управлением программное обеспечение TBD. В прошлом я использовал lighttpd и mod_secdownload для обеспечения файлов на файловых серверах, и это работало хорошо (выход).

Я задаюсь вопросом, существует ли способ сделать это использование комбинации IIS и .NET C#. Все мои другие серверы выполняют ту комбинацию, и она упростила бы вещи немного, если я мог бы сделать то же для файловых серверов. Строка над заголовком, файлы, которые размещаются, являются большими. Я видел примеры людей, использующих небольшое приложение для создания объекта FileStream, читаю в файле и создаю Ответ HTTP вручную. Это работает, но так как я работаю с файлами 500 + МБ в размере, это медленно как heck. И у меня потенциально будет 300 пользователей, поражающих поле сразу, запрашивая файлы. Это бесполезно.

Так, кто-либо видит путь вокруг этого? Я пытаюсь создать более прозрачную систему, и если все мои серверы запустят то же программное обеспечение/аппаратные средства, то это сделает мою жизнь намного более простой. Заранее спасибо за любой совет Вы даете!

9
задан Kev 1 February 2010 в 18:49
поделиться

4 ответа

Знаешь что? Статья KB - это какашки. Вот моя официальная рекомендация:

public void StreamFile(string filePath)
{
    string fileName = Path.GetFileName(filePath);

    using (var fStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        var contentLength = fStream.Length;

        if (Request.UserAgent.Contains("MSIE"))
        {
            Response.AddHeader("Content-Transfer-Encoding", "binary");
        }

        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Length", contentLength.ToString());

        // Even though "Content-Disposition" should have an upper-case "d", as per http://www.ietf.org/rfc/rfc2183.txt
        // IE fails to recognize this if the "d" is upper-cased.
        Response.AddHeader("Content-disposition", "attachment; filename=" + fileName);

        var buffer = new byte[8192];

        while (Response.IsClientConnected)
        {
            var count = fStream.Read(buffer, 0, buffer.Length);
            if (count == 0)
            {
                break;
            }

            Response.OutputStream.Write(buffer, 0, count);
            Response.Flush();
        }
    }

    Response.Close();
}
6
ответ дан 4 December 2019 в 23:06
поделиться

В то время как это не применимо напрямую, поскольку вы используете MySQL, но это что-то рассмотреть (может даже быть доступно бесплатно с помощью SQL Server 2008 Express). SQL Server 2008 предлагает поддержку FileStream, которая позволяет вам получать доступ к файлам, как если бы они напрямую хранятся в базе данных, но на самом деле находятся на файловом файловом устройстве. Тогда информация о других постах может помочь вам получить его пользователю.

Хранение Filestream в SQL Server 2008

0
ответ дан 4 December 2019 в 23:06
поделиться

Эта нить имеет мое решение для хранения использования памяти, пока пользователи загружают файлы. Вы, вероятно, хотите более крупный буфер, чем мой образец использует, хотя.

1
ответ дан 4 December 2019 в 23:06
поделиться

Попробуйте вызвать новый ActiveXObject:


function testForActiveX(){
    tester = null;
    try {
        tester = new ActiveXObject('htmlfile');
    }
     catch (e) {
        // catch the exception
    }
    if (tester) {
        // ActiveX is installed
        return true;
    }
    return false;
}
-121--1742766-

Команда для помещения выделенного фрагмента в буфер обмена оконной системы - x-select-text . Вы можете дать ему блок текста, чтобы запомнить. Так что (буфер-подстрока (точка) (метка)) или что-то должно дать вам то, что вам нужно передать в него. В ответе Джо вы можете увидеть функцию межпрограммного разреза. Посмотри, как это найти.

-121--1332791-

Вас может заинтересовать фоновая интеллектуальная служба передачи данных (BITS) корпорации Майкрософт.

http://msdn.microsoft.com/en-us/library/bb968799%28VS.85%29.aspx

Версия 2,5 ввела проверку подлинности HTTP через сертификаты.

0
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: