1

httpバインディングを使用してIISでホストされている同じインターフェイスを持つ2つのwcfサービスがあります。どちらも次の 3 つの方法しかありません。

  1. OpenFile(userid)userid.txt を作成または開きます。

  2. Write(userid, X)Xをファイルに書き込みます

  3. Close(userid)ファイルを閉じます

InstanceContextMode =InstanceContextMode.PerSessionはサービス B に使用されます。

サービス A:

  • ステートレス (サービスは技術的にユーザー ID を記憶する必要はなく、クライアントによって追跡されます) ですか、それともステートフル (サービス操作はステート マシンのようなものです。クライアントは特定の順序でメソッドを呼び出す必要があります) ですか?

  • HTTPS バインディングが使用されている場合、それはステートフルですか?

サービス B:

  • ステートレスですか、ステートフルですか (IIS セッションが使用されるため)。

より一般的な質問は、Web サービスのステートフル性が、それがどのように設計および実装されているか、またはどのようにホストされているかに依存するかということだと思います。Web サービスがステートレスかステートフルかを判断するための「チェックリスト」のようなものはありますか?

ありがとう

4

1 に答える 1

2

デフォルトでは、HTTP 経由のものはすべてステートレスです。PerSession を使用する場合でも、Web サービスの実装でセッションを使用するかどうかによって異なります。しかし、どのような場合でも、Web サーバーはステートレスのままです。これは、特別なオブジェクト (キャッシュ、ファイル、データベース、またはセッション) で状態を保持している間だけです。

セッションでさえステートレスです。サーバーが HTTP リクエストで Cookie を送信しない限り、リクエスト間で何も記憶されません。

これは HTTPS でも変わりません。完全に異なるプロトコルですが、ステートフル性は変わりません。

チェックリストについて: HTTP では常にステートレスであるため、短くなります。実装が状態を維持するかどうかは、これを変更しません。この制限を回避し、状態を維持する方法は実装次第であり、外部からそれを「見る」ことはできません。

于 2011-03-10T15:42:00.363 に答える