39
わわわわわわ わわわわわ #22 Visual Basic 2008 + Oracle Database 11 Release 1 2008.06.07 わわ わ Part.3 XML WEB わわわわ

Visual Basic 2008 + Oracle Database 11 g Release 1

  • Upload
    sai

  • View
    57

  • Download
    0

Embed Size (px)

DESCRIPTION

XML WEB サービス. Part.3. Visual Basic 2008 + Oracle Database 11 g Release 1. 2008.06.07 初音 玲. index. 自己紹介. はじめに. XMLWEB サービスとは. SOAP. XML. SOAP. XML. SOAP. XML. SOAP とは. POST /WankumaTokyo22/Connection.asmx HTTP/1.1 - PowerPoint PPT Presentation

Citation preview

Page 1: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

Visual Basic 2008+

Oracle Database 11 g Release 1

2008.06.07初音 玲

Part.3

XML WEB サービス

Page 2: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

index

WEB サービス

Oracle と ADO.NET の関係

接続

データ取得

データ更新

権限

Page 3: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

自己紹介

Z80アセンブラ

6809アセンブラ F-BASIC

N88-BASIC FORTRAN 77 COBOL

LISP Turbo Pascal

Prolog KABA

C言語 Mシリーズアセンブラ PL/I

VB3.0~ PL/SQL T-SQLVB2005/200

8

Page 4: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

はじめに

WEB サービス

Oracle と ADO.NET の関係

接続

データ取得

データ更新

権限

Page 5: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

XMLWEB サービスとは

SOAP

SOAP

SOAP

XML

XML

XML

Page 6: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

SOAP とは

POST /WankumaTokyo22/Connection.asmx HTTP/1.1Host: localhost Content-Type: application/soap+xml; charset=utf-8Content-Length: length<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi= ・・・・・・・・・・・・・・・・・・・・・・ ><soap12:Body>   :</soap12:Body></soap12:Envelope>

HTTP/1.1 200 OKContent-Type: application/soap+xml; charset=utf-8Content-Length: length<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi= ・・・・・・・・・・・・・・・・・・・・・・ ><soap12:Body>    :</soap12:Body></soap12:Envelope>

Page 7: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

Windows アプリ +WEB サービス

XML WEB サービス DBWin アプリ

Page 8: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

WEB アプリ +WEB サービス

ブラウザ XML WEB サービス DBWEB アプリ

FW

Page 9: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

開発環境

WEB サービスの配置について

ソース

MSIL

MSIL

実行環境

MSIL

MSIL

MSIL

MSIL

ソース MSIL手動 XCOPY

手動 XCOPY

手動 XCOPY

初回時

FTP

HTTP

MSIL

サイトの発行

naitive

naitive

naitive

naitive

naitive初回時

初回時

初回時

初回時

初回時

Page 10: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

Web サイトの発行

WEB アプリのときは、 aspx ファイルの内容をサイト上で更新できるかを決定

ASPX

dll (aspx.vb の MSIL)

テンポラリアセンブリ

JITコンパイル

Page 11: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

ソリューション

プロジェクトと仮想フォルダの関係について

プロジェクト1

プロジェクト2

プロジェクト3

プロジェクト4

IIS

仮想フォルダ1

仮想フォルダ2

仮想フォルダ3

仮想フォルダ4

WP

WP

WP

WP

Page 12: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

はじめに

WEB サービス

Oracle と ADO.NET の関係

接続

データ取得

データ更新

権限

Page 13: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

ADO.NET の基本的な構造

.NET データプロバイダ

Connection

Command DataReader

DataAdapter

データベース

DataSet

Windows コントロールASP.NET コントロール

Transaction

Parameter

プログラミング

プログラミング

Page 14: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

ODP.NET の基本的な構造

ODP.NET

OracleConnection

OracleCommand OracleDataReader

OracleDataAdapter

Oracle Database

DataSet

Windows コントロールASP.NET コントロール

OracleTransaction

OracleParameter

プログラミング

プログラミング

Page 15: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

Visual Studio から Oracle に接続Visual Studio

ODP.NET

OracleDatabase

ODE.NET

アセンブリ

ODT

ODP.NET

ODP.NET

デプロイ

.NET ストアド ( アセンブ

リ )

ビルド

ODP.NET:Oracle Data Provider for .NETODT :Orace Developer Tools for Visual StudioODE.NET:Oracle Database Extensions for .NET

Page 16: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

ODT と VS のバージョン関連表対応 DB バージョン 対応 Visual Studio

ODT 10.1.x.x Oracle 9i Database Release 2Oracle Database 10g Release 1

Visual Studio .NET 2003

ODT 10.2.0.1 Oracle 9i Database Release 2Oracle Database 10g Release 1Oracle Database 10g Release 2

Visual Studio .NET 2003

ODT 10.2.0.2 Oracle8i R8.1.7.4 以降 Visual Studio .NET 2003Visual Studio 2005

ODT 11.1.0.6 Oracle 9i Database Release 2 ~ Visual Studio .NET 2003Visual Studio 2005Visual Studio 2008

~ ODT 10.2: サーバーエクスプローラとは別ODT 11.1 ~ : サーバーエクスプローラに統合

Page 17: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

専用ミドルウェアは、やっぱり速い

OLE DB .NET Data Provider

OLE DB Provider for

Oracle

ODP.NET oo4o

ログオン 2.4 3.0 3.2 1.0参照 2.0 3.5 3.5 1.0追加 0.7 1.0 1.0 1.0更新 0.7 1.2 1.2 1.0

17

VB2005+oo4o の処理時間を1としたときの相対比独自プログラムによる測定

Page 18: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

DataSet クラス

• メモリ上の仮想データベース• DataTables コレクション

– DataTable クラス• DataRows コレクション• DataColumns コレクション• Constraints コレクション

• DataRelations コレクション– RDBMS のリレーション定義に相当– 親子関係を定義

主キー , 外部キー制約

Page 19: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

ODP.NET

•特定のデータソースへの接続を確立

OracleConnectionオブジェクト

•データソースに対してコマンドを実行

OracleCommandオブジェクト

•データソースから前方向、読取専用でデータ取得

OracleDataReaderオブジェクト

•DataSetを設定し、データソースを使用して更新内容を解決

OracleDataAdapterオブジェクト

Page 20: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

index

WEB サービス

Oracle と ADO.NET の関係

接続

データ取得

データ更新

権限

Page 21: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

OracleConnection オブジェクト

<WebMethod(Description:=" 認証チェック ")> _Public Function IsLogin2(ByVal userID As String, _ ByVal password As String) As Boolean Dim isOK As Boolean = False Dim cn As New OracleConnection() cn.ConnectionString = _ String.Format(Setting.ConnectionString, userID, password) cn.Open() isOK = True Try cn.Close() Catch ex As Exception End TryEnd Function

Page 22: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

ADO.NET からのエラーの取得

Try ~ Catch

• エラー処理をおこなって呼び出し元に戻る• cn.Open を Try ~ Catch で囲む• Catch には Exception

Global.asax

• エラーは例外として呼び出し元に戻る• エラーログを一元取得したいとき• Try ~ Catch では囲まない

Page 23: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

DB サーバ

アプリケーション ODP.NET

接続プーリング

• ODP.NET のデフォルト動作はPooling=True

User Id={0};Password={1};Data Source= ホスト文字列 ;

接続

切断

接続切断

接続

切断

接続処理疑似

疑似疑似

疑似疑似

Page 24: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

index

WEB サービス

Oracle と ADO.NET の関係

接続

データ取得

データ更新

権限

Page 25: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

OracleDataReader

<WebMethod(Description:="EMP テーブルから EMPNO,ENAME を取得する ")> _Public Function GetRecords(ByVal userID As String, _ ByVal password As String) As (Of TStatus) Using _cn As New Oracle.DataAccess.Client.OracleConnection() : Using _cmd As New OracleCommand(sqlString, _cn) Dim rd As OracleDataReader = Nothing rd = _cmd.ExecuteReader Do While rd.Read Dim item As New TStatus item.EmpNo = rd.Item("EMPNO").ToString item.Ename = rd.Item("ENAME").ToString emp.Add(item) Loop End Using _cn.Close() End Using Return empEnd Function

Page 26: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

Parameter オブジェクト

以下の条件を与えたときの実行結果は?

Page 27: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

index

WEB サービス

Oracle と ADO.NET の関係

接続

データ取得

データ更新

権限

Page 28: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

データソースと DataSet クラスの対応付け

.NET データプロバイダには、更新可能セットがない

DataSet は仮想的なデータベース

• もちろん更新も可能

.NET データプロバイダと DataSet の相互乗り入れ

• DataSet によるデータソースの更新可能セットを実現

データソース Command DataAdapter Dataset

アプリ

Page 29: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

OracleDataAdapter オブジェクト

<WebMethod(Description:="EMP テーブルを取得する ")> _ Public Function GetRecords(ByVal userID As String, _ ByVal password As String) As System.Data.DataSet Const sqlString As String = "SELECT * FROM EMP" Dim Ds As New System.Data.DataSet

Using _cn As New OracleConnection() _cn.ConnectionString = String.Format(Setting.ConnectionString, userID, password) _cn.Open() Using _cmd As New OracleCommand(sqlString, _cn) Using _da As New OracleDataAdapter(_cmd) _da.Fill(Ds, "EMP") End Using End Using _cn.Close() End Using Return Ds End Function

Page 30: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

OracleCommandBuilder で SQL 作成

Using _tr As OracleTransaction = _cn.BeginTransaction() Using _cmd As New OracleCommand(sqlString, _cn) _cmd.Transaction = _tr '### 重要 ### Using _da As New OracleDataAdapter(_cmd) Using cb As New OracleCommandBuilder(_da) _da.UpdateCommand = cb.GetUpdateCommand() _da.InsertCommand = cb.GetInsertCommand() _da.DeleteCommand = cb.GetDeleteCommand() _da.Update(ds, "EMP") isOK = True If isOK Then _tr.Commit() Else _tr.Rollback() End If End Using End Using End Using End Using

Page 31: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

暗黙的なトランザクション

TableAdapter ごとに Connection が存在– Connection に対するトランザクションでは無

31

System.Transactions クラスを使う

DEPTTableAdapter オブジェクト

EMPTableAdapter オブジェクトOracle

Database

OracleConnectionオブジェクト

OracleConnectionオブジェクト

OracleCommandオブジェクト

OracleCommandオブジェクト

MS-DTC ( マイクロソフト分散トランザクションコーディネータ )MS-DTC ( マイクロソフト分散トランザクションコーディネータ )

Page 32: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

暗黙的なトランザクション

Try Me.Validate() Using _trn As New System.Transactions.TransactionScope Me.DEPTBindingSource.EndEdit() Me.DEPTTableAdapter.Update(Me.DataSet1.DEPT) ' Me.EMPBindingSource.EndEdit() Me.EMPTableAdapter.Update(Me.DataSet1.EMP) ' _trn.Complete() ' トランザクション完了 End UsingCatch ex As System.Transactions.TransactionAbortedException MessageBox.Show(ex.Message)Catch ex As Exception MessageBox.Show(ex.Message)End Try

32

System.Transactions の参照設定を忘れないように

ADO.NET 2.0 からはCOM+ カタログ登録不要GAC への登録不要

Page 33: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

index

WEB サービス

Oracle と ADO.NET の関係

接続

データ取得

データ更新

権限

Page 34: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

権限

接続は、アプリ固有ユーザ ID

• コネクションプーリング• アプリ側でアクセス制御• 直接ツールで接続されたら?• アプリ側にバグがあったら?

接続は、利用者固有ユーザ ID

• コネクションプーリング• DB の設定でアクセス制御• 直接ツールで接続されても安全• アプリ側にバグがあっても安全

Page 35: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

Windows

Oracle におけるユーザ管理

OracleOracle 認証

OracleWindows 認証

ユーザー

ローカル認証だと 4 万人くらいが限界なので AD 認証も考慮

インスタンス

ユーザー

インスタンス

ユーザー

認証

認証

権限

権限

Security

Policy

Security

Policy

Security

Policy

Page 36: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

Windows アプリにおけるお勧め認証構造

XML WEB サービス DB

DB 認証

Win アプリ

ID/ パス渡し

Windows 認証

Page 37: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

WEB アプリにおけるお勧め認証構造

ブラウザ XML WEB サービス DB

DB 認証

WEB アプリ

ID/ パス渡し

Page 38: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

まとめ

• 接続–接続プーリング

• データ取得–コード記述開発–GUI 操作開発

• データ更新–CommandBuilder–トランザクショ

ン• 権限

–Oracle 認証–Windows 認証

Page 39: Visual Basic 2008 + Oracle Database 11 g  Release 1

わんくま同盟 東京勉強会 #22

QA