1

あるWebメソッドでいくつかのセッション情報を設定し、それを別のWebメソッドで返そうとしていますが、2番目のWebメソッドではセッションデータが常に空です。これが私が試したことです

Webメソッド1-セッション情報を設定します

Method StartSession() As %String [WebMethod]
{
     set %session.NewSession = 1
     set %session.Data("key") = "dude"
     Quit "Session Started"
}

Webメソッド2-セッション情報を取得すると、男が返されますが、空白が返されます

Method TestSession() As %String [WebMethod]
{
    Quit $Get(%session.Data("key"))         
}
4

2 に答える 2

1

キャッシュWebサービスでセッションを使用するには、WebサービスクラスのSOAPSESSIONクラスパラメータを1に設定する必要があります。

これを行うと、Webサービスは応答でSOAPセッションヘッダーを返します。このヘッダーを期待するように構築されたクライアントを使用している場合は、他に何も設定する必要がない場合があります。それ以外の場合、クライアントアプリケーションはこのヘッダーを読み取り、それ以降のすべてのリクエストに含める必要があります。これにより、サーバーは使用しているセッションを認識できます。ドキュメントに記載されているこのヘッダーの例は次のとおりです。

<csp:CSPCHD xmlns:csp="http://www.intersystems.com/SOAPheaders">value of
CPSCHD token</csp:CSPCHD>

セキュリティは、例では対処できない別の問題であることに注意してください。

また、Intersystemsは、呼び出しが行われた後、Webサービスが一定期間ライセンスを使用し続けることを決定したことにも注意してください。これに関するドキュメントが見つかりません。1回の呼び出しで数秒程度だと思います。これにより、他のソフトウェアを使用してWebサービスを提供し、他のソフトウェアがWebサービス以外のメカニズムを介してキャッシュを呼び出す場合には発生しないライセンスの問題が発生する可能性があると思います。他のソフトウェアが、名前付きユーザーと匿名ユーザーに関する使用許諾契約のすべての規則に注意深く従っている場合でも、これは当てはまると思います。ただし、このライセンスに関するものについてはよくわかりません。それでも、アーキテクチャにコミットする前に、いくつかのテストを行うことをお勧めします。

于 2012-10-08T20:42:44.100 に答える
0

psrの回答の代わりに、状態を処理する別の方法は、カスタムSOAPヘッダーを使用することです。

例えば:

次のように、カスタムSOAPヘッダーのクラスを作成します。

Class Headers.TimeStamp Extends %SOAP.Header
{
     Property TimeSent As %TimeStamp;    
}

Webメソッドでこれを行います:

set h=##class(Headers.TimeStamp).%New()
set h.TimeSent=$ZTIMESTAMP
do ..HeadersOut.SetAt(h,"Timestamp")

これにより、次のSOAPヘッダーが生成されます。

  <SOAP-ENV:Header>
    <TimeStamp xmlns:hdr="http://www.myapp.org">
      <TimeSent>60712,70996.027Z</TimeSent>
    </TimeStamp>  
  </SOAP-ENV:Header>

これにより、キャッシュのセッション管理を使用するのではなく、SOAPヘッダー内で状態を維持できます。

于 2012-10-10T21:06:41.997 に答える