Microsoft Office ソリューションに XML Web サービスを統合する
Paul Cornell
Microsoft Corporation
September 6, 2001
日本語版最終更新日 2001 年 11 月 6 日
これまで、多くの人々が XML Web サービスについて話しているのを耳にしてきたことでしょう。
XML Web サービスとは、インターネットやイントラネットを経由して、
データとサービスを別のアプリケーション (Microsoft® Office など) に提供するアプリケーション ロジックの単位です。
たとえば、全米の自動車製造業者にフロントガラスのワイパーを卸す問屋を経営していることを考えてみてください。
現在、取引先は電話か Web ページの汎用の注文フォームで発注すると想定します。
では、Office アプリケーションの豊富な機能のすべてを、
この問屋の注文入力用アプリケーションに追加することを想像してみてください。
この機能によって、
取引先は Microsoft Excel ワークシート テンプレートのような Office アプリケーション内部から、
インターネットを経由して発注を行ったり、
受注の確認を受け取ることができるでしょう。
さらに、取引先は Excel の豊富な機能を使用して、
それぞれ独自の方法で注文の分析やレポート処理ができるようになるでしょう。
しかし、インターネットやイントラネットを経由して、
アプリケーション ロジックをプログラム上に公開することは、
XML Web サービスを使用する利点の 1 つに過ぎません。
Office の開発者が今日直面している大きな問題は、
ソリューションの展開とバージョン管理の問題です。
今日、Office ソリューションは通常マクロや COM (Component Object Model) アドインとして配布されています。
これらのソリューションは、COM アドインを展開する、
またはこれらのソリューションのアップグレードを行う特定のコンピュータに緊密に結び付けられています。
そのため、ユーザーはいろいろなことに気を配りながらファイルの登録や再インストールを行う必要があります。
さらに、ユーザーがこのようなソリューションの展開やアップグレードの最中に面倒な事態に遭遇した場合、
結局、開発者が技術的なサポートを行うために多くの時間を費やすことになります。
XML Web サービスでは、それぞれの Web サーバーや Web サーバー ファームで管理しているコードを使用し、
インターネット、または組織内ではイントラネットを経由して、
プログラムで一般の人々にビジネス サービスを公開します。
その際、Office などのアプリケーションは、
XML (eXtensible Markup Language) と SOAP (Simple Object Access Protocol) を使用し、
Web サーバー上の Web サービスを HTTP (Hypertext Transfer Protocol) 経由で呼び出します。
このように書くと、この Web サービスはやや複雑なように思えますが、
実は多数の XML Web サービスを実装するために行う必要のある詳細な作業は、
SOAP Toolkit 2.0 などのツール、
まもなく登場する Microsoft Visual Studio® .NET および Microsoft .NET Framework などによって、
開発者には隠蔽されます。
その結果、これまでのスキルとソリューションを応用することで、
インターネットやイントラネットを経由して組織のビジネス サービスを公開できます。
次のセクションでは、Office から XML Web サービスを呼び出す方法を具体例で説明します。
XML Web サービスの詳細については、
このセクションの後半の「背景技術 : XML Web サービスの技術的な説明」を参照してください。
XML Web サービス構築の詳細については、
このコラムの後半の「背景技術 : XML Web サービスの構築」を参照してください。
Office からの XML Web サービスの呼び出し
Office からの XML Web サービスの呼び出しは、COM オブジェクトの呼び出しと同様です。
つまり、XML Web サービスへの参照設定を行ってから、XML Web サービスが公開している関数を呼び出します。
現在、XML Web サービスを呼び出すには、以下の条件があります。
- XML Web サービスの HTTP アドレスを知る必要があります。
XML Web サービス プロバイダが XML Web サービスを実装する方法によって異なりますが、
プロバイダからの付加情報が必要な場合もあります
(詳細については、このコラムの後半の「XML Web サービスを呼び出すクライアント ソリューションの作成」セクションを参照してください)。
XML Web サービス プロバイダが UDDI (Universal Description, Discovery, and Integration) を使用して XML Web サービスを公開している場合、
http://www.uddi.org
などの Web サイトを使用して XML Web サービスを検索できます。
UDDI を使用していない場合は、
XML Web サービス プロバイダに直接連絡して、
HTTP アドレスや付加情報を問い合わせる必要があります。
- XML Web サービスで呼び出す固有の関数の名前や入力パラメータを知る必要があります。
この場合も、http://www.uddi.org
などの Web サイトを使用してこの情報を入手するか、
XML Web サービスに直接連絡します。
- XML Web サービスを呼び出すクライアント コンピュータに、
SOAP Toolkit 2.0 Service Pack 2 (SP2) または SOAP Toolkit 2.0 SP2 再配布可能ファイルをインストールする必要があります
(詳細については、このコラムの後半の「SOAP Toolkit 2.0 SP2 のインストール」セクション、
または「SOAP クライアント DLL のインストールと登録」セクションを参照してください)。
SOAP Toolkit 2.0 SP2 は、
SOAP Toolkit 2.0 SP2 再配布可能ファイルよりも簡単にインストールできます。
ただし、SOAP Toolkit 2.0 SP2 の方が若干サイズが大きく、
開発者だけが使用するツールを公開しています。
この情報を入手し、SOAP Toolkit をインストールすれば、
XML Web サービスを呼び出すソリューションを記述する準備が整います。
簡単な例として、米国の慣習的な度量衡からメートル法に移行中のメーカーに勤務していると仮定します。
自分で変換用の関数を記述するのではなく、
代わりに変換を行うことができる XML Web サービスを発見します。
XML Web サービスでマイルからキロメートルに変換する関数を呼び出す簡単なマクロの作り方を以下に示します。
この XML Web サービスを行う架空の HTTP アドレス http://example.microsoft.com/WebServices/MetricConversions.wsdl があるとします。
この XML Web サービスの関数名は MilesToKilometers で、
この関数は、キロメートルに変換するマイル数を指定する Long 値を受け取ります。
説明を簡単にするために、
以下のように、Microsoft Word 文書で選択されている数値を使用して、
変換するマイル値を取得します。
Public Sub ConvertMilesToKilometers()
' まず、Microsoft SOAP タイプ ライブラリ
' (MSSOAP1.dll) への参照を設定します。
Dim objSOAPClient As MSSOAPLib.SoapClient
Dim lngKilometers As Long
On Error GoTo ConvertMilesToKilometers_Err
Set objSOAPClient = New MSSOAPLib.SoapClient
' SOAP Client オブジェクトを XML Web サービスにバインドします。
objSOAPClient.mssoapinit _
bstrWSDLFile:="http://example.microsoft.com/WebServices/MetricConversions.wsdl"
If IsNumeric(Application.Selection) = True Then
' 構文 objSOAPClient.methodname(parameters) を使用して、
' XML Web サービスの MilesToKilometers 関数を呼び出します。
lngKilometers = objSOAPClient.MilesToKilometers(Application.Selection)
MsgBox Prompt:=Application.Selection & " マイルは、" & _
lngKilometers & " キロメートルに相当します。"
Else
MsgBox Prompt:="選択範囲には数値だけを含んでいる必要があります。再選択してください。"
End If
ConvertMilesToKilometers_End:
Exit Sub
ConvertMilesToKilometers_Err:
With objSOAPClient
MsgBox Prompt:="エラーが発生しました。" & vbCrLf & vbCrLf & _
"エラー コード :" & .faultcode & vbCrLf & _
"エラー文字列 :" & .faultstring & vbCrLf & _
"エラーの詳細 :" & .detail
End With
Resume ConvertMilesToKilometers_End
End Sub
このコード サンプルの完全な説明については、
このコラムの最後の「XML Web サービスを呼び出すクライアント ソリューションの作成」を参照してください。
このコラムの残り部分では、
XML Web サービスの技術的な説明と、
独自の XML Web サービス構築について詳しく説明します。
背景技術 : XML Web サービスの技術的な説明
アーキテクチャ上は、XML Web サービスのソリューションは以下のコンポーネントで構成されます。
- SOAP クライアント DLL (ダイナミック リンク ライブラリ) を使用して、
インターネット経由で XML Web サービスと相互作用するクライアント アプリケーション
- COM DLL、WSDL (Web サービス記述言語) ファイル、
および Web サーバーが SOAP Toolkit を使用している場合は、
WSML (Web サービス メタ言語) ファイルとして実装される、XML Web サービスをホストしている Web サーバー
SOAP とは ?
SOAP (Simple Object Access Protocol) とは、
クライアント アプリケーションと XML Web サービスの間で情報を交換するための、
XML ベースのメッセージング プロトコルです。
現在、SOAP は転送プロトコルの HTTP (Hypertext Transport Protocol) と共に最も広く使用されていますが、
SOAP は拡張可能なプログラムなので、必要に応じてほかのプロトコルでも使用できます。
したがって、次のような簡単な関数を考えてみましょう。
この関数は、2 つの Double 型の数値を加算し、
この 2 つの数値の合計を Double 型で返します。
Public Function AddDoubles(ByVal dblFistNumber As Double, _
ByVal dblSecondNumber As Double) As Double
AddDoubles = dblFirstNumber + dblSecondNumber
End Function
以下は、HTTP を経由してこの関数を使用する SOAP の要求と応答の例です。
要求 (HTTP 経由で SOAP を使用して、クライアント アプリケーションから XML Web サービスに送信されます)
POST/soaplisten/MyAddDoublesWebService.wsdl HTTP/1.1
Content-Type: text/xml; charset="UTF-8"
HOST: MyServer
SOAPAction: "http://tempuri.org/action/NumberCrunching.AddDoubles"
Content-Length: 410
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope">
<SOAP-ENV:Body>
<SOAPSDK1:AddDoubles xmlns:SOAPSDK1="http://tempuri.org/message/">
<dblFirstNumber>45</dblFirstNumber>
<dblSecondNumber>32</dblSecondNumber>
</SOAPSDK1:AddDoubles>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
応答 (HTTP 経由で SOAP を使用して、XML Web サービスからクライアント アプリケーションに送信されます)
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: July 6, 2001 21:34:23 GMT
Content-Type: text/xml; charset="UTF-8"
Content-Length: 445
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope">
<SOAP-ENV:Body>
<SOAPSDK1:AddDoublesResponse xmlns:SOAPSDK1="http://tempuri.org/message/">
<Result>77</Result>
<dblFirstNumber>45</dblFirstNumber>
<dblSecondNumber>32</dblSecondNumber>
</SOAPSDK1:AddDoublesResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP の要求メッセージおよび応答メッセージを構築する方法を以下に示します。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 行より前のすべての情報は HTTP 固有のプロパティです。
要求メッセージでは、
要求メッセージの送信先とアクション、
HTTP のバージョン、コンテンツの種類と長さが HTTP プロパティに含まれています。
応答メッセージでは、
HTTP のバージョンと応答コード、
Web サーバーの種類、日付、コンテンツの種類と長さが HTTP プロパティに含まれています。
- SOAP の要求メッセージと応答メッセージはいずれも Envelope エレメントと Body エレメントを含んでいます。
SOAP メッセージの形式は、名前空間のプレフィックス SOAP-ENV を使用する
http://schemas.xmlsoap.org/soap/envelope 名前空間で定義されます。
省略可能な encodingStyle 属性は、
データ型を SOAP メッセージ内の XML にマップする方法を定義するエンコーディング規則のセットを参照します。
- 要求メッセージの AddDoubles エレメントと応答メッセージの AddDoublesResponse エレメントは、
XML Web サービスに渡すデータおよび XML Web サービスから渡されるデータを示します。
既定の名前空間
http://tempuri.org/message/ を使用して、
要求メッセージと応答メッセージのエレメント名を修飾します。
エレメント名が一意になれば、エレメント名を変更できます。
- 要求メッセージの dblFirstNumber エレメントと dblSecondNumber エレメントは、
XML Web サービスに渡すデータを示します。
応答メッセージの Result エレメントは、
XML Web サービスから渡されるデータを示します。
応答メッセージは、確認のため、
渡された dblFirstNumber エレメントおよび dblSecondNumber エレメントを再表示します。
SOAP Toolkit の優れている点は、
SOAP メッセージを自動的に生成し、
HTTP を経由して XML Web サービスの要求や応答を転送することです。
WSDL とは ?
WSDL (Web サービス記述言語) とは、
XML Web サービスを記述するための XML 書式です。
WSDL ファイルは、クライアント コンピュータが適切な書式の SOAP 要求を Web サーバーに送信した場合に、
その Web サーバーが対応する XML Web サービスを提供する義務があることを示すコントラクトです。
つまり、上記のセクションで説明した AddDoubles 関数は、以下のような WSDL ファイルになります。
<?xml version="1.0" encoding="UTF-8" ?>
<definitions
name ="MyAddDoublesWebService"
targetNamespace = "http://tempuri.org/wsdl/"
xmlns:wsdlns="http://tempuri.org/wsdl/"
xmlns:typens="http://tempuri.org/type"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:stk="http://schemas.microsoft.com/soap-toolkit/wsdl-extension"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<schema
targetNamespace="http://tempuri.org/type"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
elementFormDefault="qualified">
</schema>
</types>
<message name="NumberCrunching.AddDoubles">
<part name="dblFirstNumber" type="xsd:double"/>
<part name="dblSecondNumber" type="xsd:double"/>
</message>
<message name="NumberCrunching.AddDoublesResponse">
<part name="Result" type="xsd:double"/>
<part name="dblFirstNumber" type="xsd:double"/>
<part name="dblSecondNumber" type="xsd:double"/>
</message>
<portType name="NumberCrunchingSoapPort">
<operation
name="AddDoubles"
parameterOrder="dblFirstNumber dblSecondNumber">
<input message="wsdlns:NumberCrunching.AddDoubles" />
<output message="wsdlns:NumberCrunching.AddDoublesResponse" />
</operation>
</portType>
<binding
name="NumberCrunchingSoapBinding"
type="wsdlns: NumberCrunchingSoapPort" >
<stk:binding preferredEncoding="UTF-8"/>
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="AddDoubles" >
<soap:operation
soapAction="http://tempuri.org/action/NumberCrunching.AddDoubles" />
<input>
<soap:body use="encoded"
namespace="http://tempuri.org/message/"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="encoded"
namespace="http://tempuri.org/message/"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
</binding>
<service name="MyAddDoublesWebService" >
<port name="NumberCrunchingSoapPort"
binding="wsdlns: NumberCrunchingSoapBinding" >
<soap:address location=
"http://MyServer/soaplisten/MyAddDoublesWebService.wsdl" />
</port>
</service>
</definitions>
WSDL ファイルの構築方法を以下に示します。
- WSDL ファイルは definitions という名前のルート エレメントを含みます。
definitions エレメントは、WSDL ファイルで使用する名前空間と共に、XML Web サービスの名前を提供します。
- 最初の子エレメント types は、
WSDL ファイルで使用する任意の複雑な型の XSD (XML スキーマ定義) を示します。
この WSDL ファイルは単純な XML スキーマ型のみを使用しているので、
types エレメントは空の schema エレメントを含んでいます。
ここでは types エレメントは完全なコードを記述するためだけに提供されています。
- 次の 2 つの message エレメントは、
XML Web サービスに渡すデータと XML Web サービスから渡されたデータを格納するメッセージの名前
NumberCrunching.AddDoubles と NumberCrunching.AddDoublesResponse を示しています。
各 message エレメントは、
dblFirstNumber、
dblSecondNumber、
Result などの XML Web サービスに渡すデータや XML Web サービスから渡されるデータごとに、
1 つの part エレメントを含みます。
それぞれのメッセージ部分は double 型の XML スキーマです。
- portType エレメントは、
message エレメントで記述たメッセージと、
それを使用する操作の間のマッピングを記述します。
AddDoubles 操作では、
入力は NumberCrunching.AddDoubles メッセージで、
出力は NumberCrunching.AddDoublesResponse メッセージです。
- 次に binding エレメントは、
portType エレメントで定義された操作間をバインドしているネットワーク転送プロトコル、
およびプロトコル内での実装方法を定義します。
この場合、SOAP プロトコルを使用しています。
- 最後に service エレメントは、
サービスの物理実装と SOAP バインディングを結び付けます。
ここでは、WSDL ファイルの URL を記述しています。
WSDL の詳細については、
Web Services Description Language (WSDL) Explained を参照してください。
SOAP Toolkit を使用する利点の 1 つとして、
WSDL/WSML Generator (SOAP Tookit の一部) を使って WSDL ファイルを自動的に生成できます。
SOAP Toolkit を使用している場合は、
WSDL/WSML Generator が WSML ファイルを自動的に生成します。
SOAP Toolkit は WSML ファイルを使用して、
WSDL ファイルでの操作を COM DLL の関数にマップします。
以下は、AddDoubles 関数の WSML ファイルの例です。
<?xml version="1.0" encoding="UTF-8" ?>
<servicemapping name="MyAddDoublesWebService">
<service name="MyAddDoublesWebService">
<using PROGID="MyAddDoublesWebService.NumberCrunching"
cachable="0" ID="NumberCrunchingObject" />
<port name="NumberCrunchingSoapPort">
<operation name="AddDoubles">
<execute uses="NumberCrunchingObject"
method="AddDoubles" dispID="1610809344">
<parameter callIndex="1" name="dblFirstNumber"
elementName="dblFirstNumber" />
<parameter callIndex="2" name="dblSecondNumber"
elementName="dblSecondNumber" />
<parameter callIndex="-1" name="retval" elementName="Result" />
</execute>
</operation>
</port>
</service>
</servicemapping>
WSML ファイルの構築方法を以下に示します。
- ルートの servicemapping エレメントは、
WSDL から COM DLL へのマッピングを記述する service エレメントを識別します。
これは、対応する WSDL ファイルの service エレメントと一致する必要があります。
- service エレメントは、
COM DLL を識別する using エレメントを含んでいます。
- port エレメントは、
WSDL ファイルの portType エレメントを指定します。
WSDL ファイルの portType エレメントの operation エレメントごとに、
1 つの operation エレメントが WSML ファイルに存在します。
- operation エレメントには、
操作を実行するオブジェクトを指定する execute 子エレメントがあります。
uses 属性にはオブジェクト名を記述し、
method 属性にはメソッド名を指定し、
dispID 属性にはメソッドのディスパッチ ID を指定します。
- execute エレメントには、
メソッドのパラメータを指定する parameter 子エレメントがあります。
callIndex 属性値はパラメータを戻り値のパラメータとして識別します。
大部分の場合、WSDL ファイルと同様、WSML ファイルを直接編集する必要はありません。
背景技術 : XML Web サービスの構築
現在 Office 開発者が利用できる SOAP Toolkit 2.0 SP2 を使用して、
XML Web サービスを構築する手順を以下に示します。
- Microsoft Visual Basic® 6.0 Professional Edition または Enterprise Edition などの、
COM に準拠した開発用アプリケーションを使用して COM DLL を構築します。
- IIS (Internet Information Services) を実行している Web サーバーに COM DLL を登録します。
Microsoft Windows NT® 4.0 SP 6 以降または Microsoft Windows® 2000 Server 以降の Web サーバーが有効です。
Web サーバーと同じコンピュータに COM DLL を構築した場合、
Visual Studio で [ファイル] メニューの [プロジェクト名.dll の作成] をクリックするときには COM DLL は既に登録されています。
- Web サーバーに SOAP Toolkit 2.0 SP2 をダウンロードし、インストールします。
- Web サーバーで、
SOAP Toolkit 2.0 SP2 の WSDL/WSML Generator を使用して、
COM DLL 関数を WSDL ファイルおよび WSML ファイルとして作成します。
- Web サーバー上でパブリックに利用できる仮想ディレクトリに、
WSDL ファイルおよび WSML ファイルを格納します。
- クライアント コンピュータに SOAP Toolkit 2.0 SP2 クライアント DLL をインストールし、登録します。
- SOAP Toolkit 2.0 SP2 クライアント DLL を使用して、
Web サーバーの XML Web サービスを呼び出すクライアント ソリューションを作成します。
COM DLL の構築と登録
XML Web サービスを作成する最初の手順は、
ほかの COM DLL とまったく同様で、
Visual Basic などの COM に準拠した開発用アプリケーションを使用して COM DLL を作成します。
IIS Web サーバーで実行している Visual Basic 6.0 で COM DLL を作成するときは、
COM DLL のコンパイル前に ([プロジェクト] メニューの) [プロジェクト プロパティ] ダイアログ ボックスの [全般] タブで、
[メモリに保持] チェック ボックス および [対話型インターフェイスの抑制] チェック ボックスをオンにしてください。
SOAP Toolkit 2.0 SP2 のインストール
XML Web サービスを作成する次の手順は、
Web サーバーに SOAP Toolkit 2.0 SP2 をインストールします。
SOAP Toolkit 2.0 SP2 をインストールする前に、Visual Basic 6.0 ランタイム ファイル、Microsoft Internet Explorer 5.0 以降、および MSXML (Microsoft XML parser) 3.0 SP1 以降をインストールしておく必要があります。
SOAP サーバー オブジェクトは Microsoft Windows NT 4.0 SP6 以降または Microsoft Windows 2000 Server で機能します。
SOAP Toolkit 2.0 SP2 ダウンロード用 Web ページ では、上記の内容を含めて、
インストールに必要な条件について詳しく説明しています。
SoapToolkit20.exe ファイルをダウンロードして、
インストールすると、[スタート] メニューの [Microsoft SOAP Toolkit] に以下の 4 つのエントリを確認できます。
- Read Me、インストールおよびトラブルシューティングについての情報を含んでいます。
- Trace Utility、SOAP のトランザクションを監視し、報告します。
- User Guide、マニュアルを含んでいます。
- WSDL Generator、COM DLL から WSDL ファイルと WSML ファイルを作成します。
WSDL/WSML Generator は、あらかじめ Visual Studio または Visual Basic 6.0 がインストールされていることを必要とします。
WSDL/WSML Generator の使用
続いて、WSDL ファイルおよび WSML ファイルの形式で、
COM DLL の XML 表記を作成する必要があります。
SOAP Toolkit 2.0 SP2 の WSDL/WSML Generator を使用すると、この作業が自動的に行われます。
WSDL/WSML Generator は、IIS をインストールした Windows NT および Windows 2000 コンピュータのみで機能します。
WSDL/WSML Generator は、以下の情報を問い合わせます。
- XML Web サービス名 (これが WSDL/WSML のファイル名になります)
- COM DLL へのローカル パス
- 公開する関数
- SOAP リスナをバインドする URL。
WSDL/WSML Generator を実行する前に、
SOAP リスナをバインドするために、
IIS に仮想ディレクトリを作成する必要があります。
- SOAP リスナの種類。
ほとんどの XML Web サービスでは、ISAPI が選択した既定のオプション のままにしておきます。
- XSD スキーマ名前空間 (2001 の既定の選択肢が選択されたままにしておきます)
- WSDL ファイルの文字セット (UTF-8 または UTF-16)
- WSDL ファイルおよび WSML ファイルを格納する場所 (新しく仮想ディレクトリを作成することをお勧めします)
現時点では、
XML Web サービスと受け渡しできる Visual Basic のデータ型 (XSD の対応するデータ型) は、
Boolean (xsd:boolean)、
Byte (xsd:unsignedbyte)、
Date (xsd:dateTime)、
Double (xsd:double)、
Integer (xsd:short)、
Long (xsd:int)、
Single (xsd:float)、
String (xsd:string)、および Variant (xsd:anyType) のみです。
これらの型に基づいた配列および多次元配列もサポートされます。
Optional パラメータはサポートされていません。
WSDL/WSML Generator は、
これらの Visual Basic のデータ型を、対応する XSD のデータ型にマッピングします。
WSDL/WSML Generator は、ここに挙げていないデータ型に遭遇すると、
データ型を "????????" として WSDL ファイルに表示します。
ソリューションの一部として WSDL ファイルを使用する場合は、
メモ帳などのテキスト エディタを使用して、
WSDL ファイルの "????????" 参照を上記で一覧した、
有効な対応する XSD のデータ型に変更する必要があります。
注
Office のオブジェクト型 (たとえば、
Application オブジェクト、
Document オブジェクト、
Range オブジェクトなど) は XML Web サービスとのデータの受け渡しを行えません。
上記で一覧した XSD オブジェクトだけが XML Web サービスとのデータの受け渡しを行えます。
Web サーバーでの WSDL ファイルおよび WSML ファイルのホスト
WSDL/WSML Generator で、
XML Web サービスの ISAPI SOAP リスナを指定する場合は、
Web サーバーの soapisap.dll ファイルが、
WSDL ファイルと WSML ファイルの読み込み、
およびクライアント アプリケーションとの SOAP メッセージのやり取りを自動的に処理します。
WSDL/WSML Generator で指定した IIS 仮想ディレクトリに WSDL ファイルおよび WSML ファイルを格納すると、
XML Web サービス要求を受信する準備は完了です。
SOAP クライアント DLL のインストールと登録
SOAP クライアント DLL は、Windows 98、
Windows Millennium Edition、
Windows NT 4.0 SP6、
および Windows 2000 SP1 で機能します。
SOAP クライアント DLL の最も簡単なインストール方法は、まず SOAP Toolkit 2.0 SP2 ダウンロード用 Web ページ から再頒布可能ファイルをダウンロードします。
この再配布可能ファイル (redistributable files) は、
2 つの Microsoft インストーラ マージ ファイル、
soap_core.msm と isapi_files.msm で構成されています。
Visual Studio Installer などのアプリケーションを使用すると、
これらのマージ ファイルを Microsoft インストーラ (.msi) ファイルに追加できます。
この .msi ファイルは、SOAP クライアント DLL を自動的にインストールして登録したクライアント コンピュータ上で実行できます。
XML Web サービスを呼び出すクライアント ソリューションの作成
XML Web サービスを呼び出すクライアント ソリューションを開発するには、
まずクライアントから Microsoft SOAP タイプ ライブラリ (MSSOAP1.DLL) への参照を設定する必要があります。
MSSOAP1.DLL への参照を設定すると、
以下のように AddDoubles XML Web サービスを呼び出せます。
Private Const FIRST_NUMBER As Double = 45
Private Const SECOND_NUMBER As Double = 32
' 呼び出し側サブルーチン。
Public Sub CallAddTwoNumbers()
MsgBox Prompt:= FIRST_NUMBER & " と" & _
SECOND_NUMBER & " の合計は " & AddTwoNumbers _
(dblFirstNumber:=FIRST_NUMBER, _
dblSecondNumber:=SECOND_NUMBER) & " です。"
End Sub
' 呼び出される関数
Public Function AddTwoNumbers(ByVal dblFirstNumber As Double, _
ByVal dblSecondNumber As Double) As Double
' まず、Microsoft SOAP タイプ ライブラリ (MSSOAP1.DLL)
' への参照を設定する必要があります。
Dim objSOAPClient As MSSOAPLib.SoapClient
On Error GoTo AddTwoNumbers_Err
Set objSOAPClient = New MSSOAPLib.SoapClient
' objSOAPClient オブジェクトを XML Web サービスにバインドします。
objSOAPClient.mssoapinit _
bstrWSDLFile:="http://MyServer/soaplisten/MyAddDoublesWebService.wsdl", _
bstrServiceName:="MyAddDoublesWebService", _
bstrPort:="NumberCrunchingSoapPort"
' 構文 objSOAPClient.methodname(parameters) を使用して
' XML Web サービスの関数を呼び出します。
AddTwoNumbers = objSOAPClient.AddDoubles(dblFirstNumber, dblSecondNumber)
AddTwoNumbers_End:
Exit Function
AddTwoNumbers_Err:
With objSOAPClient
MsgBox Prompt:=Err.Description & ":" & vbCrLf & _
"エラー コード : " & .faultcode & vbCrLf & _
"エラー文字列 : " & .faultstring & vbCrLf & _
"エラーの詳細 : " & .detail
End With
Resume AddTwoNumbers_End
End Function
上記のコード例では、
CallAddTwoNumbers サブルーチンが AddTwoNumbers 関数を呼び出し、
数値 45 と 32 を XML Web サービスに渡します。
SoapClient オブジェクトを正しい XML Web サービスにバインドするには、
以下のパラメータを指定して、
SoapClient オブジェクトの mssoapinit メソッドを使用します。
- bstrWSDLFile: このパラメータは必須で、
バインド先 WSDL ファイルの URL です。
- bstrServiceName: このパラメータは省略可能で、
WSDL ファイル内の適切な service エレメント名です。
既定では、WSDL ファイルの最初の service エレメントが使用されます。
- bstrPort: このパラメータは省略可能で、
WSDL ファイル内の適切な port エレメント名です。
既定では、WSDL ファイルの最初の port エレメントが使用されます。
- bstrWSMLFile: このパラメータは省略可能で (上記の例にはありません)、
バインド先 WSML ファイルの URL です。
(このソリューションでは、組み込みの XML スキーマ データ型だけを使用していて) カスタム データ型マッパーを使用していないので、
このパラメータを例から省略しました 。
- mssoapinit メソッドが正常に呼び出されると、
いつもの
object.method(parameters) 構文を使用して、
XML Web サービス内のあらゆる関数を呼び出せます。
残念なことに、自動的に構文を完成する Microsoft IntelliSense® は使用できません。
手動でメソッド名とパラメータ名を入力する必要があります。構文チェックは実行時まで行われません。
注
Web Services Proxy Wizard を使用すると、
Visual Basic Editor で IntelliSense を有効にできます。
Web Services Proxy Wizard には Microsoft Visual C++® 6.0 が必要ですが、
このウィザードを使用する場合には C++ の経験はまったく必要ありません。
Web Services Proxy Wizard を使うことを選択した場合、
Visual Basic の実装コードはやや異なります。
Web Services Proxy Wizard ダウンロードに付属している技術文書で、
Visual Basic コードに対して行う必要のある、コードのちょっとした変更について説明しています。
- コードにエラーが存在する場合、
SoapClient オブジェクトの faultcode、faultstring、
および detail プロパティが
(Microsoft Visual Basic for Applications の Err.Description プロパティと同様の) 内容の豊富なエラー報告を提供します。
たとえば、WSDL ファイルで、IIS と関連して SOAP Toolkit の Trace Utility を使用したトレースを行えるように、
標準のポート 80 ではなく、
ポート 8080 を使用するように soap:address エレメントの location 属性の値を変更しました。
ポート 80 を使用するように値を戻し忘れた場合でも、
detail プロパティが間違いを発見できる情報を提供します。
リンク集
Paul Cornell は、
MSDN Online Office Developer Center および Office Developer のドキュメント作成を担当しています。
自由な時間には、妻とカード ゲームをしたり、娘に本を読んであげたりしています。
|