.NET1.1Frameworkを使用して構築したIIS6でホストされているサイトがあります。このサイトにアクセスするユーザーは、Internet Explorerを排他的に使用し、フォーム認証を使用してログインします。サイト内で、ユーザーはiFrameが埋め込まれている特定のページに移動できます。このiFrameは、同じサーバーでホストされている別の仮想ディレクトリを指し、この2番目の仮想ディレクトリは単にムービーファイルをストリーミングします。ユーザーのマシンにWindowsMediaPlayerがインストールされていて、Windows Media Playerがデフォルトのムービープレーヤーになるように構成されているとすると、ユーザーがiFrameを使用してページに移動すると、Windows Media Playerがポップアップして新しいウィンドウを開き、ムービーが再生されます。
ごく最近、.NET3.5フレームワークを使用するようにソフトウェアをアップグレードしました。ただし、ムービーファイルが再生されなくなったことに気づきました。代わりに、WindowsMediaPlayerがサーバーに接続できないことを示すメッセージが表示されます。
私は先に進み、Fiddlerを使用してクライアントマシンとサーバーマシン間のネットワークトラフィックの調査を行いました。これらは、物事が機能するシナリオで発生する手順です。
1)Internet Explorerは、ムービーファイルをサーバーに要求します。リクエストヘッダーには、適切な認証とセッション識別に必要なCookieが含まれています。
* GET MYSITE HTTP / 1.1
Accept:image / jpeg、image / gif、image / pjpeg、application / x-ms-application、application / xaml + xml、application / x-ms-xbap、application / vnd.ms-excel、 application / vnd.ms-powerpoint、application / msword、application / x-shockwave-flash、/
参照元:MYREFERRER
Accept-Language:en-US
ユーザーエージェント:Mozilla / 4.0(互換性; MSIE 8.0; Windows NT 6.1; WOW64; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.2)
Accept-Encoding:gzip、deflate
Host:MYHOST Connection:Keep-Alive
クッキー:a99fd71e-eb1b-4750-a391-5ad8cfe32068 = 800edb77-9649-4f93-9db9-98d678a3b166; ASP.NET_SessionId = uf1cr1bflwly0nmhbm1wnb55; EDDS = 581A46E81C8DB0B475F1AFE00545F9B157A377BD31DF65BB2AEF7D1B293BDE9E178409FF251CF49F109FDC601C48F15A5FCDE1A29A18E6853357887698A01E7A2CC3690ECE98C464DE1359D796B60
2)サーバーはCookieを使用してユーザーからの要求を認証し、映画を返します。返品のステータスコードは
200です。HTTP/1.1200 OK
日付:2010年8月11日水曜日21:30:55 GMT
サーバー:Microsoft-IIS / 6.0
X-Powered-By:ASP.NET
X-AspNet-バージョン: 1.1.4322
Content-Length:3934146
Accept-Ranges:bytes
Content-Disposition:inline; filename = AS000006.wmv
最終更新日:2010年8月10日火曜日21:24:49 GMT
ETag: "MyExampleFileID"
Cache-Control:private
Content-Type:application / octet-stream
3)Windows Media Playerは、ムービーファイルをサーバーに要求します。この場合も、リクエストヘッダーにはCookieが含まれています。ただし、今回の要求には、バイト8192-の範囲要求が含まれています。
* GET MYSITE HTTP / 1.1
Accept:/
User-Agent:Windows-Media-Player / 12.0.7600.16415
Accept-Encoding:gzip、deflate
Range:bytes = 8192
-Unless-Modified-Since:Tue、10 Aug 2010 21:24: 49 GMT
If-Range: "MyExampleFileID"
接続:Keep-Alive
ホスト:MYHOST
Cookie:ASP.NET_SessionId = uf1cr1bflwly0nmhbm1wnb55; EDDS = 581A46E81C8DB0B475F1AFE00545F9B157A377BD31DF65BB2AEF7D1B293BDE9E178409FF251CF49F109FDC601C48F15A5FCDE1A29A18E6853357887698A01E7A2CC3690ECE98C464DE1359D796B60 a99fd71e-eb1b-4750-a391-5ad8cfe32068 = 800edb77-9649-4f93-9db9-98d678a3b166 *
4)サーバーはCookie情報を使用してユーザーからの要求を認証し、ドキュメントを返します。返品のステータスコードは206です
。HTTP/1.1206部分コンテンツ
日付:2010年8月11日水曜日21:30:57 GMT
サーバー:Microsoft-IIS / 6.0
X-Powered-By:ASP.NET
X-AspNet-Version :1.1.4322
Content-Range:バイト8192-3934145 / 3934146
Content-Length:3925954
Accept-Ranges:バイト
Content-Disposition:インライン; filename = AS000006.wmv
最終更新日:2010年8月10日火曜日21:24:49 GMT
ETag: "MyExampleFileID"
Cache-Control:private
Content-Type:application / octet-stream
うまくいかない場合は、次のようになります。
1)Internet Explorerは、ムービーファイルをサーバーに要求します。リクエストヘッダーにはCookieが含まれています。
* GET MYSITE HTTP / 1.1
Accept:image / jpeg、image / gif、image / pjpeg、application / x-ms-application、application / xaml + xml、application / x-ms-xbap、application / vnd.ms-excel、 application / vnd.ms-powerpoint、application / msword、application / x-shockwave-flash、/
Referer:MYREFERRER Accept-Language:en-US
User-Agent:Mozilla / 4.0(互換性; MSIE 8.0; Windows NT 6.1; WOW64; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.2)
Accept-Encoding:gzip、deflate
Host:MYHOST
Connection:Keep-Alive
クッキー:a99fd71e-eb1b-4750-a391-5ad8cfe32068 = 7ac4710e-1434-43c9-b521-bdf30328e2fb; ASP.NET_SessionId = glytwo55ztohig451qrf1355; EDDS = CFC5EAE69F6D6CDD0A1D53632F01629F8AC8F4901A6106DD26A0A9F4E1E0B0EC9D4B1B78FBEF5C504A54E6B1A43F576CD846ADD3D394DF257EBBF982BED5E99900116945191268E985ED923DAA78DF4FBD68B09FF3B4D14D7092FB846012E5F464D9EBC4BA834235839A397A4F00B548D353A1AB9B67F6F960E26FC655D19D4B89347DFA2BCC7101E2397AC7EB0F105025E5A21253C0E619E809C1D9B64E53E8 *
2)サーバーはCookieを使用してユーザーからの要求を認証し、映画を返します。リターンのステータスコードは
200です。HTTP/1.1200 OK
Cache-Control:private
Content-Length:3934146
Content-Type:application / octet-stream
Last-Modified:Wed、11 Aug 2010 15:29:44 GMT
Accept -範囲:バイト
ETag: "MyExampleFileID"
サーバー:Microsoft-IIS / 7.5
X-AspNet-バージョン:2.0.50727
コンテンツ-配置:インライン; filename = AS000006.wmv
X-Powered-By:ASP.NET
日付:2010年8月11日水曜日21:36:45 GMT
3)Windows Media Playerは、ムービーファイルをサーバーに要求します。リクエストにはCookieが含まれていません。サーバーはユーザーの認証に失敗し、映画は送信されません。
* GET MYSITE HTTP / 1.1
Accept:/
User-Agent:Windows-Media-Player / 12.0.7600.16415
Accept-Encoding:gzip、deflate
Range:bytes = 8192
-Unless-Modified-Since:Wed、11 Aug 2010 15:29: 44 GMT
If-Range: "MyExampleFileID"
接続:Keep-Alive
ホスト:MYHOST *
したがって、この時点で、なぜそれが機能しないのかを正確に知っています。Windows Media PlayerからのリクエストにはCookieが含まれていないため、サーバーはリクエストを認証してデータを送信しません。私が完全に理解していないのは、WindowsMediaPlayerが要求したときにそれらのCookieが使用されていない理由です。
上記のすべてのリクエストは、同じマシンから2つの異なるサイトに対して行われたため、異なるバージョンのWindowsMediaPlayerでは問題がないことを私は知っています。異なるオペレーティングシステムと異なるバージョンのIEを備えたいくつかの異なるマシンで動作を再現したため、特定のマシンに関連しているようには見えません。新しいサイトにIIS7を使用する代わりにIIS6に戻してみましたが、それでも違いはありません。私はそれが私のコードの何かでなければならないと思っているままですが、どこから探し始めるのかさえわかりません。
私の質問は次のとおりです。InternetExplorerがURL情報をWindowsMediaPlayerに渡す方法を本当に理解している人はいますか。おそらく、これを理解するための正しい方向を示してくれますか。この時点での私の唯一の他の選択肢は、マイクロソフトのサポートでチケットを開くことです...そして率直に言って、彼らのサポートチームでの私の経験は過去数年間最適ではありませんでした。どんな助けでも大歓迎です!
編集:Process Explorerを使用して、IEがWindowsMediaPlayerにCookie情報を提供していないことを証明できました。しかし、私はまだその理由を理解することに近づいていません。