- PR -

SOAP TOOLKIT→.NET WEBサービスでのセッション管理

1
投稿者投稿内容
ROCKSHOX
会議室デビュー日: 2002/07/05
投稿数: 5
投稿日時: 2002-07-05 02:07
初めて投稿します。

EXCEL VBAからSOAP Toolkitを使って大量のデータを.NETで作った
WEBサービスをRPC的に数回の呼び出しに分けて取得しようと考えています。

.NET WEBサービスではセッション管理にcookieを使用しているので
.NET Windowsアプリケーションからはcookieコンテナを指定することで
実現できたのですが、SOAP Toolkitでは、cookieコンテナを指定する
インターフェースがないようです。httpヘッダを直接操作出来れば、と
思ったのですが、SetCookieヘッダの読出方法と、Cookieヘッダの付加
方法がわかりません。

どなたかSOAP Toolkitから.NET WEBサービスの呼出でセッション管理
を実現する方法、情報、実現しているサンプル等をご存知でないでしょうか?

よろしくお願いします。
NothingBut.NETFX
大ベテラン
会議室デビュー日: 2001/09/13
投稿数: 102
投稿日時: 2002-07-06 21:38
こんな感じではどうでしょう。

コード:
Private Sub Command1_Click()
  Dim dom As New DOMDocument40
  Dim ser As New SoapSerializer30
  Dim xmlhttp As New ServerXMLHTTP40
  
  ser.Init dom
  
  ser.StartEnvelope
  ser.StartBody
  ser.StartElement "SetData", "http://example.org/"
  ser.StartElement "s", "http://example.org/"
  ser.WriteString Text1.Text
  ser.EndElement
  ser.EndElement
  ser.EndBody
  ser.EndEnvelope
  
  xmlhttp.open "POST", "http://localhost:8080/session.asmx"
  xmlhttp.setRequestHeader "SOAPAction", "http://example.org/SetData"
  xmlhttp.send dom
  
  Dim CookieStr As String
  CookieStr = xmlhttp.getResponseHeader("Set-Cookie")
  Dim SessionId As String
  SessionId = Mid$(CookieStr, 1, InStr(CookieStr, ";") - 1)
  
  Set dom = New DOMDocument40
  Set ser = New SoapSerializer30
  ser.Init dom
  
  ser.StartEnvelope
  ser.StartBody
  ser.StartElement "GetData", "http://example.org/"
  ser.EndElement
  ser.EndBody
  ser.EndEnvelope
  
  Set xmlhttp = New ServerXMLHTTP40
  xmlhttp.open "POST", "http://localhost:8080/session.asmx"
  xmlhttp.setRequestHeader "SOAPAction", "http://example.org/GetData"
  xmlhttp.setRequestHeader "Cookie", SessionId
  xmlhttp.send dom
  
  Set reader = New SoapReader30
  reader.Load xmlhttp.responseStream
  MsgBox reader.RpcResult.Text
End Sub


ちなみにサービス側はこういう実装です。

コード:
<%@WebService Language="C#" Class="SessionAware"%>
using System;
using System.Web.Services;
[WebService(Namespace="http://example.org/")]
public class SessionAware : WebService {
	[WebMethod(EnableSession = true)]
	public string GetData() { return (string)(Session["Data"]); }
	[WebMethod(EnableSession = true)]
	public void SetData(string s) { Session["Data"] = s; }
}

ROCKSHOX
会議室デビュー日: 2002/07/05
投稿数: 5
投稿日時: 2002-07-09 23:21
質問した者です。

教えて頂いたコードを元に、無事、VBAとVBScriptからのセッション状態
を保持したメソッド呼出に成功しました。

XMLHTTPを使って直接POST&httpヘッダの取得をするとは、素晴らしい
解決法ですね。半ばあきらめていただけに非常にうれしいです。

xmlhttp.responseStreamの取得に失敗する場合は、
Do ループとxmlhttp.ReadyStateを使って完全に読み込むまで待てば
解決するようです。

どうもありがとうございました!

1

スキルアップ/キャリアアップ(JOB@IT)