例: SOAP Web サービスの生成 (C#)

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  SOAP Web サービスの実装 >

例: SOAP Web サービスの生成 (C#)

:このサンプルは MapForce を使用して SOAP Web サービスを生成する方法について説明しています。プログラムコード 次のパスで見つけることのできるサンプル MapForce プロジェクトから C# プログラムコードを生成します: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\\Query Person database.mfp。 このプロジェクトは2つのオペレーションを公開する SOAP Web サービス実装します。: getPersonputPerson. この Web サービスは個人の詳細を抽出、または、追加するために上記のオペレーションをおこない、背景で Microsoft Access データベースと通信します。MapForce 内でこのようなプロジェクトを作成するサンプルに関しては、次を参照してください: SOAP Web サービスプロジェクトの作成.

 

生成された C# コードをコンパイルするために、このサンプルは Visual Studio 2015  を使用します。ソリューションは ASP.NET が有効化された状態で Internet Information Services (IIS) 10 にデプロイされます。

 

簡素化のためこのサンプルは最小の Web サーバー構成を使用していることに注意してください。生産環境では、 Web サーバー、または、所属機関内のセキュリティポリシー、その他の要素が指定するとおりの異なるアプローチを使用しなければならない場合があります。

 

SOAP Web サービスを呼び出すために、このサンプルは XMLSpy Enterprise Edition を使用しています。XMLSpy がない場合、 Web サービスをテストするために、SOAP クライアントまたは Web サービスを呼び出すことのできるプログラムコードが必要になります。

 

メモ:Visual Studio 2008 と IIS 7.x を使用する場合、Windows 機能 「IIS Metabase and IIS 6 configuration compatibility」を最初にインストールする必要がある場合があります。

 

ステップ 1:  query.wsdl ファイルの準備

このサンプル Web サービスは次の WSDL ファイルが基礎になっています: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\query.wsdl. デフォルトでは、 query.wsdl ファイルは C# と Java のためのサービスの詳細を1つの箇所がコメントアウトされている2つの異なる箇所で定義しています。ですから、 C# コード生成前に、 query.wsdl ファイル内の次のセクションをロケートし、コメントアウトされていることを確認してください:

 

  <service name="WS2DB">
    <port name="WS2DBSoapPort" binding="tns:WS2DBSoapBinding">
        <soap:address location="http://localhost/WS2DB/WS2DB.asmx"/>
    </port>
  </service>

 

(Java にのみ適用することのできる)次のセクション  がコメントアウトされていることを確認してください:

 

  <!--<service name="WS2DB">
     <port name="WS2DBSoapPort" binding="tns:WS2DBSoapBinding">
        <soap:address location="http://localhost:8080/axis/services/WS2DB"/>
     </port>
  </service>-->

 

 

ステップ 2: C# コードの生成とビルド

MapForce 内で <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\ フォルダーから 「Query Person database.mfp」プロジェクトを開きます。プロジェクトウィンドウ内のプロジェクトを右クリックし、「コードの生成 | C#」を選択します。MapForce はプログラムコードを生成し、メッセージウィンドウ内に結果を表示します:

mff_soap_cs_ex02

 

デフォルトでは、 コードはプロジェクトのディレクトリに対応する「出力」と呼ばれるサブディレクトリに生成されます。このチュートリアルのスコープのため、デフォルトの設定がそのままにされています。出力ディレクトリを変更するには、次を参照してください:コード生成設定の設定

 

Visual Studio を実行して生成されたソリューションを開きます。ソリューション内の全てのプロジェクトがロードされるまで待ってください。

 

Visual Studio を管理者として作動する必要があるかもしれません。 また、このサンプルソリューションは下記のとおり 32-ビットアプリケーション としてコンパイルされる必要があります。

 

ソリューションを次のようにビルドすることができます:

 

Build メニューからBuild Solution (Ctrl+Shift+B)をクリックします。

 

このサンプルは 32-ビットアプリケーションのみで作動する Access のための ADO プロバイダーを使用して Microsoft Access データベースをクエリすることに注意してください。このため、 32-ビットアプリケーションとしてソリューションを以下のようにコンパイルする必要があります:

 

「Build」 メニューから「Configuration Manager」をクリックします。 x86 のために新規のソリューションプラットフォームを作成し、再度ビルドします。

mff_soap_cs_solution_platform

 

 

ステップ 3: Web サービスを IIS にデプロイする

Visual Studio の Solution Explorer ウィンドウ内で、プロジェクト services-Site/WS2DB を右クリックし、「Publish Web App」 をコンテキストメニューから選択します。

mff_soap_cs_ex03

 

ターゲットを選択するようにプロンプトされると、「カスタム」を選択します。

mff_soap_cs_ex04

 

プロファイル名を入力するようにプロンプトされると、「iis」などの後で認識しやすい値を入力します。

mff_soap_cs_ex05

 

「ファイルシステム」を公開メソッドとして選択し目的のフォルダーを選択します (このサンプルでは、 "C:\WS2DB")。

mff_soap_cs_ex06

 

「Next」 をクリックします。デフォルトの設定はそのままにします。

mff_soap_cs_ex07

 

「Next」 をクリックして、「Publish」をクリックします。

mff_soap_cs_ex08

 

出力ウィンドウは結果を表示します。

mff_soap_cs_ex09

 

ステップ 4: IIS マネージャー内のアプリケーションの構成

新規アプリケーションを IIS に次のように追加することができます:

 

1.IIS 内では、「Sites | Default Web Site」を右クリックし、コンテキストメニューから 「Add Application」 を選択します。
2.「Alias name」の下に、Web アプリケーションを認識する名前を入力します (このサンプルの場合「サービス」 )。
3.「Physical path」 の下に、アプリケーションが以前公開されているパスを入力します (このサンプルの場合「C:\WS2DB」)。

mff_soap_cs_ex10

 

更に、この特定のサンプルに関しては、アプリが作動するプールのために 32-ビットアプリケーションが有効化されている必要があります。

 

1.IIS 内で、アプリがデプロイされている アプリケーションツール を右クリックします。コンテキストメニューから「高度な設定」を選択します。
2.「32-ビットアプリケーションを有効化する」からオプション「True」を選択します。

mff_soap_cs_iis_pool

 

Microsoft Access データベースからデータが読み取られるため、 IIS アプリケーションツールはデータベースファイルにアクセスするパーミッションが必要になります。MapForce プロジェクトを変更していない限り、 データベースを次のパスから使用することができます: <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\Tutorial\people.mdb

 

1.Windows Explorer 内で、 people.mdb ファイルを右クリックし、「プロパティ」を選択します。
2.「Security」 タブから「Edit」をクリックします。
3.「Add」 をクリックし、オブジェクト名を次のように入力します: IIS AppPool\DefaultAppPool。デフォルト以外のプールにアプリをデプロイした場合、「DefaultAppPool」 を異なる値に変更します。
4.必要とされるパーミッションを与え、「Apply」をクリックします (このサンプルでは、データベースファイルへの書き込みとデータベースファイルの読み取りのパーミッションが必要になります)。

mff_soap_cs_pool_permission

 

Web サービスが作動しているかをテストするには、次の URL にアクセスします : http://localhost/WS2DB.

mff_soap_cs_ex11

 

Web サービスの詳細がブラウザー内でロードされる場合、下記のとおりクライアントアプリケーションから Web サービスの呼び出しに進むことができます。

 

Web サービスの呼び出し

文字通り上記のステップをおこなうと、Web サービスの WSDL は以下で使用することができます: http://localhost/WS2DB/query.wsdl. デプロイした Web サービスを呼び出すには、 他の SOAP クライアントを使用することもできますが、XMLSpy を使用します。

 

XMLSpy (Enterprise Edition) を起動します。「SOAP」 メニューから「新規の SOAP リクエストを作成する」をクリックします。プロンプトされると、Web サービスの WSDL を入力します (このサンプルでは、 http://localhost/WS2DB/query.wsdl)。

mff_soap_cs_ex12

 

「OK」 をクリックします。SOAP オペレーションを選択するようにプロンプトされると、getPerson を選択します。

mff_soap_cs_ex13

 

XMLSpy は以下のようなサンプルリクエストを生成します。

 

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SOAP-ENV:Body>
    <getPerson SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <Query xsi:type="xsd:string">String</Query>
    </getPerson>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

リクエストの <Query> 要素を検索し、 Web サービスに入力として提供する値を「文字列」と置き換えます。上記のとおり、この Web サービスは Access データベースから個人の情報を抽出します。 このサンプルのスコープのため、実際にデータの一部を抽出するために、「文字列」 を「Ro」と置き換える必要があります(すなわち、氏名に「Ro」が含まれている個人のみが抽出されます)。新しいリクエストは、以下のとおりです:

 

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SOAP-ENV:Body>
    <getPerson SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <Query xsi:type="xsd:string">Ro</Query>
    </getPerson>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

 

サーバーに上記のリクエストを送信することができます。SOAP メニューから 「サーバーにリクエストを送信する」をクリックします。SOAP リクエスト設定 ダイアログボックスが開かれます。

mff_soap_cs_ex14

 

「OK」 をクリックします。XMLSpy は呼び出しを開始し、エディター内にレスポンスを返します。下のイメージは成功したレスポンスを表示しています。

mff_soap_cs_ex15

上記と同じアプローチを使用して Web サービスにより公開されている putPerson オペレーションを呼び出すことができます。詳細な説明に関しては、 Java チュートリアル内の「Web サービスの呼び出し」セクションを参照してください。Java チュートリアル内では、 WSDL URL のみが異なりますが他の Web サービスの呼び出しのための命令は同様です。

 

トラブルシューティング

次のテーブルは Web サービスと他のソリューションをビルドする際に発生する一般的な問題をリストしています。

 

問題

ソリューション

Web サービスの呼び出しは次のエラーを返します:

 

The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine."

1.32-ビットアプリケーションとして Visual Studio 内で C# ソリューションをビルドします。
2.IIS にデプロイします。
3.アプリケーションがデプロイされている IIS アプリケーションツールを右クリックし「高度な設定」を選択します。
4.32-ビットアプリケーションを有効化から「True」を選択します。

Web サービスの呼び出しは次のエラーを返します:

 

The Microsoft Jet database engine cannot open the file 'C:\Users\<user>\Documents\Altova\MapForce2019\MapForceExamples\Tutorial\people.mdb'.  It is already opened exclusively by another user, or you need permission to view its data.

Access データベースファイルを読み取るために、 IIS アプリケーションにプールパーミッションを与えます。「ステップ 4: IIS マネージャー内でアプリケーションを構成する」 を参照してください。

Web サービスの呼び出しは次のエラーを返します:

 

System.Data.OleDb.OleDbException: Operation must use an updateable query.

Access データベースファイに書き込むために、 IIS アプリケーションにプールパーミッションを与えます。「ステップ 4: IIS マネージャー内でアプリケーションを構成する」 を参照してください。

(C) 2019 Altova GmbH