2012-04-30 17 views
2

私はデスクトップ開発者の新しいショップで働いているWeb開発者です。コードを整理する際には、特定の特質やベストプラクティスがあります。 UIビューは異なるプロジェクトに分かれています。複数のアプリケーションを単一のAppDomainで実装

ので、家のウェブ側に、私は別のアプリケーションドメイン内の別のプロジェクトの建物に問題がある:

1)私は、背後にあるコードではdefault.aspx と「ポータル」プロジェクトを持っていますLogin_Authenticateイベントの内部から呼び出されるカスタム認証メソッドがあり、デスクトップアプリケーションの「ビジネスレイヤー」にログインします。ビジネス側はセッションデータをASP.NETセッションに保存します。

2)私はdefault.aspxを持つ "viewer"プロジェクトを持っています。これはもともとポータルプロジェクトの "Viewer.aspx"と同じログインスキームと認証された罰金でカバーされていましたが、それは独立した視点であるため、それ自身のプロジェクトに立つのが得意です。

両方のweb.configファイルに同じマシンキーを追加して、.NETフォーム認証をシングルサインオンで渡せるようにしました。

私は2つの異なる様式で、視聴者のプロジェクトを構築しました:

第一トライ(それ自身のURL):

http://localhost/Viewer

第二トライ(ポータルURLの下にサブドメイン):

http://localhost/Portal/Viewer

問題は、セッションがポータル間で受け渡しされていないことですプロジェクトとビューアプロジェクト。私はこれがIISがさまざまなアプリドメインでそれらを実行しているためです。残念ながら、ポータルからのASP.NETセッションがないと、ビューアはビジネスアプリケーションにログインしません。

複数のプロジェクトを1つのアプリドメインで実行することは可能ですか?ビューアは同じセッションを必要とするため、ポータルアプリケーションの一部である必要がありますか?ビューアは、ビジネス層に独自の別のログインを必要とする別のプロジェクトである必要がありますか?このシナリオのベストプラクティス/ガイドラインがありますか?

答えて

4

デフォルトでは、セッションは異なるアプリケーション間で共有できません。

実際には、ほとんどのプロジェクトはこのように分離されていません。私の経験では、ほとんどの場合、何種類かのn層アーキテクチャを使用しています。基本的には、1つのasp.netプロジェクト内のすべての "ビュー"コード、別のdllプロジェクト内の任意のビジネスロジック/データオブジェクト、および3番目のdllプロジェクト内のデータアクセス権があります。ウェブサイトは、他の2つのDLLを参照するだけです。

あなたの問題を解決するために、この答えは何をしたいあなたを与える可能性がありますSharing sessions across applications using the ASP.NET Session State Service

+0

右 - それは私が従うアプローチです。彼ら(デスクトップ/ winform開発者)が望むのは、別のプロジェクトにviewer.aspxページを作成してからxcopyを使ってポータルアプリケーションドメインに展開することです。なぜ、これが悪い習慣とみなされたのかについて、かなり具体的な理由があることを期待していました。 –

+0

プログラミングの喜びは "ひどい"システムを構築することができますが、それでも機能するかもしれません。あなたのケースでは、あなたは "ひどい"アーキテクチャを持っていますが、それを動作させる方法があります。あなたが持っているすべてのビューのための完全に異なるプロジェクトを作成することは、メンテナンスの悪夢になるでしょう!私はいくつかのオープンソースプロジェクトを見て、彼らがどのようにそれを行うのかを見てみることをお勧めします。 –

+0

xcopyを使用してファイルを手動でコピーすることで、同じアプリドメインに展開できます。これは、手動で行った以前のWebプロジェクトで証明されています。大きな疑問は、もしそうでなければ、なぜそうではないのでしょうか? –

0

multiple projects, but one siteを持つ方法があります。その例は少し古いですが、まだ動作し、私たちのサイトをどのようにしているのですか?

関連する問題