誰かがWCFで、SessionMode.Allowedでセッションフルまたはセッションレスのチャネルを作成する方法を教えてもらえますか。つまり、WCFサービスとの両方のタイプの会話を許可します。ありがとう。
2 に答える
SessionMode
サービスの契約についてのみ説明し、必要な動作を実装していません。SessionMode.Allowed
サービスはセッションありでもセッションなしでも正常に機能することを全員に伝えます。セッションを使用するかどうかは、バインディングで定義されます。
異なる種類のバインディングは、異なる機能のセットを提供します。一部の機能には、セッションサポートが必要/含まれています。
同じコントラクトに対して複数のバインディングを使用でき、1つのバインディングはセッションを実装しますが、同時に他のバインディングは実装しません。
たとえば、WSHttpBindingはメッセージセキュリティを実装しているため、以下のコードはセッションフルチャネルを作成します。
EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");
WSHttpBinding binding = new WSHttpBinding();
ChannelFactory<ICalculator> factory = new
ChannelFactory<ICalculator>(binding, address);
ICalculator channel = factory.CreateChannel();
この行を追加すると、チャネルがセッションレスになります。
binding.Security.Mode = SecurityMode.None;
BasicHttpBinding
デフォルトで実装されるため、以下のバインディングもセッションレスSecurityMode.None
です。
BasicHttpBinding myBinding = new BasicHttpBinding();
EndpointAddress myEndpoint = new EndpointAddress("http://localhost/MathService/Ep1");
ChannelFactory<IMath> myChannelFactory = new ChannelFactory<IMath>(myBinding, myEndpoint);
WCFでサポートされているセッションの種類は、セキュリティベースのセッションだけではありません。WCFは、次の4種類のセッションをサポートしています。
- 通信の両端が特定の安全な会話に合意したセキュリティベースのセッション。
- TCP / IPベースのセッション。すべてのメッセージが、ソケットレベルでの接続によって相互に関連付けられていることを確認します。
- WS-ReliableMessaging仕様を実装するSystem.ServiceModel.Channels.ReliableSessionBindingElement要素は、信頼できるセッションのサポートを提供します
- System.ServiceModel.NetMsmqBindingバインディングは、MSMQデータグラムセッションを提供します。
バインディングが上記の機能のいずれかを実装している場合、サービスはセッションフルになります。
詳細については、MSDNを参照してください-http ://msdn.microsoft.com/en-us/library/ms733040.aspx
[ServiceContract]属性のSessionModeプロパティを意味していると思います。そうだとすれば、契約のセッションの概念について誤解されていると思います。チャネルがセッションフルであるかどうかは、チャネルの作成に使用されるバインディングによって異なります。このプロパティは、実行時に、そのコントラクトのエンドポイントが適切なバインディングを使用していることを検証するために使用されます。SessionMode
セッションモードの3つの値の場合:
- 必須:これは、コントラクトのエンドポイントで使用されるバインディングがセッションをサポートする必要があることを意味します。バインディングがセッションをサポートしていない場合、クライアントは初めて使用されるときにスローされるか、サービスホストはOpen中にスローされます
- NotAllowed:反対:エンドポイントで使用されるバインディングがセッションをサポートしている場合、ランタイムは(サービスまたはクライアントを開いている間に)スローします
- 許可:デフォルト値。セッションのサポートに関係なく、コントラクトをすべてのバインディングに使用できます。
プロパティのMSDNページの備考セクションには、このプロパティに関する詳細情報があります。