- PR -

soapのsession管理について

投稿者投稿内容
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-12-29 17:16
caneさんの問題点を十分把握できていないのですが、

WebServiceにおいて、あるメソッドを呼び出した時のパラメータであるユーザーIDを
Sessionに格納してセッションが破棄されるまで保持、他のメソッドなどで
取り出しができる状態にしたい。
のであれば、

対象となるWebMethodの属性でEnableSession = trueを設定する
メソッド内は
 設定するメソッドでは Session["UserID"] = ID; で設定
 利用するメソッドでは int UserID = (int)Session["UserID"]; で取得

クライアント側では、たつごろーさんが示したように
 CookieContainer を設定する

こんな形式で利用できるかと思いますが、
こんなことでなければ、無視して下さい。

cane
常連さん
会議室デビュー日: 2004/10/06
投稿数: 37
投稿日時: 2004-12-30 10:59
Os_さん

いろいろ試しているのですが、どうもクッキーの格納、取得が
うまくいきません。
長いですがソースコードになります。

クライアントサイドform1
Private Sub login_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles login.Click

'Webサービスの戻り値
Dim response As String
Dim UID
Dim PWD
'Webサービスのインスタンス
Dim Loginservice As New WebLogin.Service1
UID = LoginID.Text
PWD = TextBox2.Text
response = Loginservice.Loginchk(UID, PWD)
If response = False Then
MsgBox("ログイン情報が間違えてます(ログインID、パスワード、登録IPアドレス)")
ElseIf response = True Then
Loginservice.CookieContainer = New System.Net.CookieContainer
Dim frm As Form2
frm = New Form2
frm.ShowDialog()
frm.Dispose()
frm = Nothing
End If
End If
End Sub

form2(ログイン認証後新しいフォームが出てくる)
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Loginservice As New WebLogin.Service1
RichTextBox1.Text = Loginservice.order_chk
End Sub

サーバサイド
<WebMethod(EnableSession:=True, Description:="ログイン認証処理を行います")> _
Public Function Loginchk(ByVal LoginID As String, ByVal LoginPass As String) As String
'DBConnectionクラスをインスタンス
Dim connection As New DBConnection

'接続してきたクライアントIP取得処理
Dim hostent As System.Net.IPHostEntry = System.Net.Dns.GetHostByAddress    (System.Net.IPAddress.Any)
ipaddr = hostent.AddressList(0).ToString
 'DB接続を行う情報設定
UID = "hoge"
PWD = "hogehoge"
DSN = "login"
SQL = "Login '" & LoginID & "','" & LoginPass & "','" & ipaddr & "'"
Loginchk = connection.Login_chk(UID, PWD, DSN, SQL)
Session("Loginchk") = LoginID
End Function

<WebMethod(EnableSession:=True, Description:="ログイン認証後")> _
Public Function order_chk() As String
Dim UID As String
Dim tes As Integer
UID = Session("Loginchk")
Return UID
End Function






Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-12-30 11:48
Osです。

全体構成がわかりませんが、示されたソースの中で、
Form2のクラス内(Form2_Loadメソッド内)でローカルにWebサービスのインスタンスを
生成して、Webサービスのメソッドにアクセスしていますが、なぜですか?

これでは、元のForm1で生成したSessionにアクセスできないのでは?
cane
常連さん
会議室デビュー日: 2004/10/06
投稿数: 37
投稿日時: 2004-12-30 12:14
OSさん

構造としては、form1で認証作業を行い成功時にはform2に切り替わるようにしてあります。
form2ではform1で入力されたIDに基づいたデータを自動的に表示する仕組みにしたかったため
Public Function order_chk()メソッドでsession格納したデータを取り出して
情報処理(SQL)を行いform2にreturnで戻す処理にしたいと考えてました
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-12-30 13:48
引用:

クライアントサイドform1
Dim Loginservice As New WebLogin.Service1

form2(ログイン認証後新しいフォームが出てくる)
Dim Loginservice As New WebLogin.Service1



試してませんが、Loginserviceをform毎に作るのではなく、もっと広域のスコープに移動したらうまくいくんではないかと思います。

_________________
たつごろー
codeseek
こみゅぷらす
cane
常連さん
会議室デビュー日: 2004/10/06
投稿数: 37
投稿日時: 2004-12-30 14:46
たつごろー さん

引用:
--------------------------------------------------------------------------------
試してませんが、Loginserviceをform毎に作るのではなく、もっと広域のスコープに移動したらうまくいくんではないかと思います
--------------------------------------------------------------------------------
私の勉強不足のためご説明がわからないので、もう少し簡単にご教授お願いします。
すいません
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-12-31 06:27
南部です。

引用:

caneさんの書き込み (2004-12-30 14:46) より:
私の勉強不足のためご説明がわからないので、もう少し簡単にご教授お願いします。
すいません


どの部分が分からないのか記述しないと説明のしようがないと思いますし、
caneさんなりにどう解釈したのか記述するといいかもしれません。

で、本題ですが、
引用:

(略)
response = Loginservice.Loginchk(UID, PWD)
If response = False Then
MsgBox("ログイン情報が間違えてます(ログインID、パスワード、登録IPアドレス)")
ElseIf response = True Then
Loginservice.CookieContainer = New System.Net.CookieContainer
(略)



1.ログインチェックWebサービスメソッド呼び出し(セッションに格納)
2.承認時にクッキーコンテナ設定

この順番ってOKですか?

また、Os_さん、たつごろーさんの回答で解決済みかもしれませんが、
form2のLoginserviceはコードを見る限りクッキーコンテナを
持っていません。
少なくとも、クッキーコンテナは同じものを使用しましょう。

cane
常連さん
会議室デビュー日: 2004/10/06
投稿数: 37
投稿日時: 2005-01-04 09:00
ありがとうございます。
デザインパターンを使うことによりインスタンスをひとつにして
データの取得ができるようになりました。
もうひとつ質問です。
フォーム認証をつかいたいのですが、フォーム認証はaspやaspxなどのwebパージでないと
利用できないのですか?(クライアントはexeです)
調べていてもあまり情報がないのでご質問させていただきます。
参照ページ
http://www.atmarkit.co.jp/fdotnet/hybooks/vbnet01/vbnet01_01.html

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