1

質問が言うように。現時点では、セッションごとにWCFクライアントプロキシ(正確にはChannelFactory)をサービスにキャッシュしています。これは正常に機能します。しかし、今はAzureに移行しており、(セッションの)複数のインスタンスがあります。AppFabricセッションの状態が機能するようになりました。そのため、セッションはAzureによって提供されますが、問題はチャネルファクトリのキャッシュにあります。ファクトリは[Serializable]ではないため、Session[]に保存できないようです。オプションは何ですか?WCFサービスメソッドが呼び出されるたびにチャネルを再作成する必要がありますか?

[1.以前の動作状態; 2.新たに試みられた解決策。3.フォールバックオプション]

  1. WCFクライアント->ASP.NET->セッションキャッシュファクトリ->チャネル->WCFサービス
  2. WCFクライアント->ASP.NET->ファクトリを保存できません!->チャネル->Azureの役割WCFサービス
  3. WCFクライアント->ASP.NET->呼び出しごとに新しいチャネル->AzureロールWCFサービス

更新:ChannelFactoryをキャッシュ(共有)することはできないことを確認しました。したがって、現在共有されていないクレデンシャル(UserNameCredentials)をどのように共有すればよいのか、そしてどういうわけか分割されたインスタンス全体に分散する必要があるのか​​という疑問が残ります。明らかなオプションは、暗号化されたクレデンシャルをキャッシュに保存することです。それは良い考えですか?それを行う他の方法はありますか?

これは新しい質問として続きます:WCFクライアントの資格情報を共有する方法...

4

1 に答える 1

1

ChannelFactoryをキャッシュする場合は、Azureロールインスタンスごとにセッションごとに1つ必要です。CacheFactoriesは異なるユーザーをサポートしている可能性があるため、セッション間で共有しないでください。

あなたが正しく言ったように、CacheFactoryはシリアライズ可能ではないので、分散キャッシュに入れることはできません。

キャッシュする理由の半分は、CacheFactoryのセットアップ時間(数十ミリ秒になる場合があります)を回避するためです。CacheFactoryのサイズがかなり大きいため、キャッシュへのシリアル化とキャッシュからのシリアル化はそれよりもさらに長くなる可能性があります。

于 2013-01-14T16:32:16.400 に答える