Видео FLV не работает в браузере без ошибок в ASP.Net

Я пытаюсь развернуть свое приложение ASP.NET, которое в настоящее время работает на 32-разрядной версии Windows Server 2003 и IIS6, на новом сервере под управлением Windows Server 2008 R2 и IIS7. Мое приложение использует ASP.NET версии 4.0 и отлично работает на компьютере 2003 года.

Моя проблема:

Я развернул приложение, и оно работает нормально, за исключением того, что видео в формате .flv не воспроизводится в браузере

Я добавил все необходимые настройки MIME, но мне все равно не повезло

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

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

Пожалуйста, помогите мне, если у вас есть какое-либо решение.


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

    Event code: 3005 
    Event message: An unhandled exception has occurred.
    Event time: 10/9/2012 1:07:14 PM 
    Event time (UTC): 10/9/2012 8:07:14 PM 
    Event ID: 09303bdb94d64235a5ab118955416895 
    Event sequence: 12 
    Event occurrence: 1 
    Event detail code: 0 

    Application information: 
        Application domain: /LM/W3SVC/1/ROOT/BYPL-1-129942868205521131 
        Trust level: Full 
        Application Virtual Path: /BYPL 
        Application Path: F:\BYPL_Simulator_26_Sept_2012\ 
        Machine name: BYPL-APP-SERVER 

    Process information: 
        Process ID: 2536 
        Process name: w3wp.exe 
        Account name: BYPL-APP-SERVER\Administrator 

    Exception information: 
        Exception type: HttpException 
        Exception message: Could not load type 'FLVStreaming'.
        at System.Web.Compilation.BuildManager.GetType(String typeName, Boolean  throwOnError, Boolean ignoreCase)
        at System.Web.Configuration.HandlerFactoryCache.GetTypeWithAssert(String type)
        at System.Web.Configuration.HandlerFactoryCache.GetHandlerType(String type)
        at System.Web.Configuration.HandlerFactoryCache..ctor(String type)
        at System.Web.HttpApplication.GetFactory(String type)
        at           System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
        at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

    Request information: 
        Request URL: http://localhost/BYPL/Administrator/MeterManagement/Installation/video/634655271233125000.flv
        Request path: /BYPL/Administrator/MeterManagement/Installation/video/634655271233125000.flv 
        User host address: 127.0.0.1 
        User: bypl 
        Is authenticated: True 
        Authentication Type: Forms 
        Thread account name: BYPL-APP-SERVER\Administrator 

        Thread information: 
        Thread ID: 5 
        Thread account name: BYPL-APP-SERVER\Administrator 
        Is impersonating: False 
        Stack trace:    at System.Web.Compilation.BuildManager.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase)
        at System.Web.Configuration.HandlerFactoryCache.GetTypeWithAssert(String type)
        at System.Web.Configuration.HandlerFactoryCache.GetHandlerType(String type)
        at System.Web.Configuration.HandlerFactoryCache..ctor(String type)
        at System.Web.HttpApplication.GetFactory(String type)
        at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
        at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

person Phoenix    schedule 08.10.2012    source источник


Ответы (1)


Я сам нашел ответ.

Я добавил файл с именем FLVStreaming.cs в папку app_code, а затем повторно опубликовал приложение, и файл содержал следующий код:

using System.Web;
public class FLVStreaming : IHttpHandler
{   // FLV header
public FLVStreaming()
{}
public void ProcessRequest(HttpContext context)
{ try{
        int pos;
        int length;
        // Check start parameter if present
        string filename = Path.GetFileName(context.Request.FilePath);
        using (FileStream fs = new   FileStream(context.Server.MapPath(filename), FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            string qs = context.Request.Params["start"];
            if (string.IsNullOrEmpty(qs))
            {
                pos = 0;
                length = Convert.ToInt32(fs.Length);
            }
            else
            {
                pos = Convert.ToInt32(qs);
                length = Convert.ToInt32(fs.Length - pos) + _flvheader.Length;
            }
            // Add HTTP header stuff: cache, content type and length        
            context.Response.Cache.SetCacheability(HttpCacheability.Public);
            context.Response.Cache.SetLastModified(DateTime.Now);
            context.Response.AppendHeader("Content-Type", "video/x-flv");
            context.Response.AppendHeader("Content-Length", length.ToString());
            // Append FLV header when sending partial file
            if (pos > 0)
            {
                context.Response.OutputStream.Write(_flvheader, 0, _flvheader.Length);
                fs.Position = pos;
            }
            // Read buffer and write stream to the response stream
            const int buffersize = 16384;
            byte[] buffer = new byte[buffersize];
            int count = fs.Read(buffer, 0, buffersize);
            while (count > 0)
            {
                if (context.Response.IsClientConnected)
                {
                    context.Response.OutputStream.Write(buffer, 0, count);
                    count = fs.Read(buffer, 0, buffersize);
                }
                else
                {
                    count = -1;
                }
            }
        }
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.ToString());
    }
}
public bool IsReusable
{   get { return true; }
}
private static byte[] HexToByte(string hexString)
{ 
    byte[] returnBytes = new byte[hexString.Length / 2];
    for (int i = 0; i < returnBytes.Length; i++)
        returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
    return returnBytes;
}
}

Похоже, что этот файл конвертируется в файл .ddl, и эта версия файла dll не соответствует архитектуре компьютера.

person Phoenix    schedule 30.10.2012