1

現在WindowsServer200332ビットおよびIIS6で実行されているASP.NETアプリケーションを、Windows Server2008R2および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)
4

1 に答える 1

0

私は自分で答えを見つけました。

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 ファイルのバージョンはマシンのアーキテクチャに一致していないようです。

于 2012-10-30T09:41:13.360 に答える