標準的な方法で機能するために VB6 DLL (COM) オブジェクトを使用する従来の ASP Web サイトが多数あります。DLL は regsvr32 され、ページは Server.CreateObject を使用して DLL 内に必要なオブジェクトのインスタンスを作成します。これにより、作成中のオブジェクトの OnStartPage 関数がトリガーされ、ScriptingContext が渡されて Request (クエリ文字列、フォーム) 情報、読み取り/更新セッション情報、読み取り/書き込み Cookie 情報 (など)。明確にするために、ScriptingContext を使用して Cookie 値を更新/保存する方法は次のとおりです。
objSC.Response.Cookies(Key) = Value
コード ベースで完全な .Net オーバーホールを行う準備として (そして最初のステップとして)、.Net 2008 VB アップグレード ツールを使用してコードを実行しました。 ADODB、ASPTypeLibrary、CDO など) を追加し、.Net オブジェクトを COM に公開できるようにするために必要な属性を追加します。アップグレード ツールによって残されたコメント (todos) に基づいて、あちこちでいくつかの微調整を行った後、コードはコンパイル可能になります。 ASPTypeLibrary (Interop) を介して上記のコードを使用して現在のように Cookie を更新/保存しようとした場合、Response.Cookies コレクションは読み取り専用です (現在 Cookie を書き込む明確な方法はありません)。
問題のあるコード行をコメントアウトすると、コードがコンパイルされ、この新しい .Net DLL (および相互運用 DLL) を GAC に登録し、regasm を使用して COM を介して登録し、従来の ASP サイトを続行するだけです。何も起こらなかったかのように動作し (Cookie の書き込みを除く)、Server.CreateObject を使用して、COM オブジェクトと見なされるものを作成し、OnStartPage への呼び出しをトリガーし、ScriptingContext を渡します。
そのため、コード ベースは .Net に「アップグレード」されていますが、多くの相互運用ライブラリを使用して以前と同じように動作し続けています。これには、ASPTypeLibrary.ScriptingContext オブジェクトの使用が含まれます。これは、従来の ASP パイプラインが公開するものであるためです。
このシナリオでCookieを作成/保存する方法を知っている人はいますか?