3

だから私に耐えてください、私はMVCとWCFで新しいです。BLLを公開する一連のサービス(WCF)を既に持っており、MVC.net Webアプリケーションからそれらを利用しようとしていますが、ここでセキュリティ操作を実行する方法がわかりません。

これらは私のアプリの要件です:

  • Webアプリケーション上のユーザーごとに異なるクレデンシャルを使用してWCFサービスを利用できる
  • 私のBLL(WCF)は、コンシューマーが何を呼び出しているかを知る必要があります(現在、MVCアプリしかありませんが、iOSとAndriodの呼び出しを追加する予定なので、後でWCFエンドポイントにRESTサービスを追加します)このためのデザインパターンはありますか?(または、soapヘッダーを使用して発信者IDを含める必要がありますか?ある種の発信者シークレットなどを使用する必要がありますか?)
  • トークンなどのセキュリティメカニズムが必要なので、サービスメソッド(WCF)を呼び出すたびにユーザー名とパスワードを渡す必要はありません。

私がこれまでに持っているもの:

  • WCFは、証明書とカスタムユーザー名バリデーターを使用します。
  • 生成されたプロキシの代わりにコントラクトインターフェイスを使用してプロキシを手動でコーディングしました。しかし、WCFサービスを呼び出すたびにユーザー名とパスワードを検証する必要があるという事実は嫌いです。ここでトークンを使用するにはどうすればよいですか?石鹸ヘッダーで送信された特定のトークンが有効であるか、まだ有効期限が切れていないかを知りたいですか?私はたくさん検索しましたが、実際にコーディングを開始するのに十分なチュートリアル/コード/例は明確ではありません;(
  • ChannelFactoryをキャッシュしようとしていますが、キャッシュする必要がありますか?つまり、契約ごとにログインユーザーごとにチャネルファクトリをキャッシュする必要があります;(それは大丈夫ですか?ここで何ができますか?

前もって感謝します!

4

1 に答える 1

0

コントラクトごとにユーザーごとにChannelFactoryをキャッシュする必要がありますか?

場合によります。いくつかの考慮事項があります。チャネルファクトリのインスタンス化には、最大70ミリ秒かかる場合があります。これを繰り返し実行している場合、ChannelFactoryをキャッシュせず、ユーザーがMVCアプリにhttpリクエストを送信するたびに1つ(または複数)をインスタンス化すると、パフォーマンスが著しく低下し、コントローラーアクションがWebサービスを呼び出します。これは、channelFactoryをキャッシュすることが速度に有益であることを示しています。

一方、ユーザー数によっては、(静的辞書などで)多くのチャネルファクトリをキャッシュしている場合、重要な量のメモリを使用し始めることになります。これは次のようになります。あなたにとっての問題。

チャネルファクトリをその場でインスタンス化する(およびそれらとそれに含まれるチャネルを正しく閉じる/中止する)コストが、MVCアプリをホストするアプリケーションプールのメモリ使用率の増加に対して高すぎるかどうかを判断する必要があります。

いずれにせよ、本番環境にデプロイする前に、アプリのプロファイルを作成することを強くお勧めします。

于 2012-12-19T12:09:22.220 に答える