2011-02-08 22 views
0

これは絡まっています。従来のASP、Cookies、およびVB.NETのCOM +オブジェクト

私は、従来のASPで書かれたWebサイトを手渡されました.BB6 COM +オブジェクトで行われたたくさんの事が、Server.ObjectCreate()インスタンス化によってASPページから呼び出されました。このインカネーションでは、Visual Studio 2003コンバータツールを実行し、そのソリューションファイルをVS 2008にアップグレードするだけで、VB6ルーチンがVB.NETに変換されました。私に迷惑を与えているVB6のモジュールの

一つは、次の形式の行で応答クッキーの束をクリア:

ASPResponse.Cookies("SysUserCode") = "" 
ASPResponseは次のように定義されて

Private ASPResponse As ASPTypeLibrary.Response 

と設定し、オブジェクトのアクティブ化での起動:

Set ASPResponse = objContext("Response") 

このモードのVB.NET変換ULE、それらの線は

ASPResponse = ContextUtil.GetNamedProperty("Response") 

ASPResponse.Cookies("SysUserCode")() = "" 

になりました(括弧の余分なペアを注意してください。

これは私のマシンでこのコードを実行すると、その行がエラーでVBエラー13を出しています。指定されたキャストは無効です。ハァッ?何をキャストしますか?

ちなみに、このモジュールは、同僚のマシンでうまく動作し、彼は私のマシンの構成と関連するコンポーネントの違いを自分のものから見ることはできません。

私は完全にここに迷っています。グーグルでは、VB.NETクッキー、またはVB.NETのCOMコンポーネントにはたくさんのものが与えられていましたが、従来のASPクッキーには何も関係ありませんでした。

+0

私たちはどちらもIIS上で動作しています。 –

+0

詳しい調査:ASPResponseのCookieメンバーにアクセスすると、実際に「無効なキャスト」が発生しているように見えます。 ASPResponse.Cookiesやそれを超えるものにアクセスするコードは、指定されたキャストが有効でない例外をスローします。 ASPページから渡されているものが、たとえ名前付きプロパティ "Response"によってアクセスされたものであっても、実際にはASPTypeLibrary.Responseオブジェクトではないように、設定に何か問題があるかどうか疑問に思う。ちょうど推測。まだ完全に混乱しています。 –

+0

VB6をVB.Netに移行することは、特にVBの人があまりいない場合は、[かなり難しい](http://stackoverflow.com/questions/tagged/vb6-migration)することができます!私はいくつかの[背景を読む](http://msdn.microsoft.com/en-gb/dd408373.aspx#migrate)をお勧めします。 – MarkJ

答えて

1

ポスト VB.NET変換... ...

Private ASPResponse As ASPTypeLibrary.Response 
Set ASPResponse = objContext("Response") 

ですか?その場合は、objContext("Response")ASPTypeLibrary.Responseオブジェクトに明示的にキャストする必要があります。これは、特にOption Strictがオンの場合に適用されます。例えば

ASPResponse = CType(objContext("Response"), ASPTypeLibary.Response) 
また

設定文はVB.NETではサポートされていませんしましょう。

+0

あなたは正しい、ジョージ。 Activateメソッドを見て、上記を編集しました。 ASPResponseを設定する実際の行がここに表示されます。 (ASPResponse = ContextUtil.GetNamedProperty( "Response")) –

+0

VB6からコードがマイグレーションされているため、 'Option Strict'がおそらくオフになっています – MarkJ

+0

@ MarkJそれは可能性があります。 –

0

これは、COMコンポーネントのホストがアクティブ化される方法と関係があります。私は応答要素にアクセスするために、COMコンポーネントがASPプロセスで実行されているように(サーバーではなく)ライブラリとしてアクティブ化されなければならないことを示す別の投稿([Klaus H. Probst])1を読みましたスペース。そこで、コンポーネントのホスティング・アプリケーションのアクティベーション・タイプをライブラリに変更して、数回再設定して再構築してみました。これで、レスポンスのCookies要素にアクセスできるようになりました。しかし、私の同僚は依然としてサーバーとしてホストアプリケーションを実行しており、問題はありません。

関連する問題