IIS でホストされ、http トランスポートを使用し、サーバーのメモリに状態を保持する WCF サービスを作成する必要があります。ステートフル サービスが適切でないことは承知していますが、この最後の制約は、サービスをレガシー クライアントで動作させるために必要です。
私の最初の考えは、値を保存するためのasp.netのセッションでした。サービスで asp.net 互換モードを有効にすると、HttpContext にアクセスできるようになりましたが、セッション オブジェクトに配置された値がメモリに保持されませんでした。これは、セッション状態を処理する http モジュールが正しく構成されていなかったことが原因だと思いますが、答えをグーグルで調べたときに、WCF セッションに出くわし、それらを使用する方がよいと考えました。
ただし、WCF セッションは文書化されておらず、サービスに奇妙な一連の前提条件を課しているように見えます。私のニーズに合った構成を見つけることができませんでした。IIS でホストする必要があり、http または https トランスポートを使用する必要があり、クライアントとサーバーが同じドメインの一部ではないため、Windows 認証では応答しません。wsHttpBinding を使用してこれを実行しようとしています。WCF セッションにはセキュリティまたは信頼できるメッセージが必要だと聞いていましたが、 - 標準のバインディングを使用し、サーバーが同じドメインの一部ではない場合、「SecurityNegotiationException The caller」で失敗します。サービスによって認証されませんでした」例外。Windows セキュリティを使用していたので、これはかなり論理的です。
セキュリティ コンプリートを無効にすると、「コントラクトにはセッションが必要ですが、バインディング 'WSHttpBinding' はそれをサポートしていないか、それをサポートするように適切に構成されていません。」で失敗します。</p>
セキュリティを無効にしたまま信頼できるメッセージを有効にすると、「WSHttpBinding がトランスポート セキュリティ (HTTPS) を介した信頼できるセッションをサポートしていないため、バインディングの検証に失敗しました。チャネル ファクトリまたはサービス ホストを開くことができませんでした。メッセージ セキュリティを使用して、HTTP を介した安全で信頼性の高いメッセージングを実現してください。」</p>
トランスポート レベルのセキュリティを有効にしようとしましたが、生成されたエラーに違いはないようです
私に適した構成はありますか? それとも、asp.net セッションを使用する計画に戻る必要がありますか?