開発と運用でサーバ名が違う環境で、.NET が提供する XML Web サービスを用いたい場合にはどうすれば良いか

開発と運用の環境によって、サーバ名やその IP が違う場合は非常に多いです。
しかし、Visual Studio の「Web 参照」を利用してしまうと、ASP.NET XML Web サービスを利用するためには事前コンパイルが必要となります。
では、複数の環境に同一のバイナリで配布したい場合にはどうすれば良いか。
この問題についての考察です。

*

※このトピックは、Visual Studio 2008 の環境に、Delphi Prism をインストールした状態で確認しました

目次

<Visual Studio の Web 参照機能の問題点>

上記概要の通り、Visual Studio には Web サービスへ接続するための機能として、「Web 参照の追加」というメニューがあります。
※「ソリューション エクスプローラ」で「プロジェクト」を選択し、右クリックすると出てくるメニュー

これは Web サービスを利用する上で、とても便利なのですが、1つ欠点があります。
それは、disco ファイルと wsdl ファイルのみが用意され、利用されると言うことです。

App_WebReferences
図 Web 参照で DataService と言う Web サービスを追加した後の、ソリューション エクスプローラ の一部

2つのファイルの細かい違いは置いておくとして、どちらにせよ、サービス提供元の解決策としては UDDI Universal Description, Discovery, and Integration) を前提にしています。

そのため、インターネット上に公開されないようなシステムでは、運用環境のサーバの名前・IP などを、開発環境と揃える必要が出てきます。

しかしながら、複数の運用環境に同一のバイナリを配布しようと考えた場合、それぞれの運用環境がすべて同じサーバ名・IP などと言う前提を元に開発することは、あり得ません。

そこで、外部に Web サービス提供元の情報を書き出しておくべきだ、と言う結論にたどりつくのは、当然と言えます。

*

<Web サービス記述言語ツール(Wsdl.exe)>

Visual Studio には、上記のような外部に Web サービスの提供場所を書き出す機能はありません。

しかし、.NET Framework SDK に含まれる、Web サービス記述言語ツール (Wsdl.exe) を利用すれば、Web サービス接続用のクラスファイルを生成することが可能です(GUI でもこのツールの機能を利用している)。

そこで、この Wsdl.exe の機能を利用し、生成されるクラスファイルの中で、Web.config ファイルにサーバ情報を書き出してしまえば、目的を果たせると考えられます。

*

<Wsdl.exe の具体的な使い方>

※Wsdl.exe についての Microsoft のドキュメントはこちらから。

ASP.NET Web サービスでクラスファイルを利用するには、ソースコードを Web アプリケーションの App_Code ディレクトリに配置する必要があります。
手順は次の通りです。

  1. 「ソリューション エクスプローラ」でクラスファイルを作りたいプロジェクトを選択し、右クリックメニューの「ASP.NET フォルダの追加」から、「App_Code」を選択する
  2. 「Visual Studio コマンドプロンプト」を立ち上げ、手順1の App_Code フォルダに移動する
  3. 「Wsdl.exe /urlkey:<構成キー名> /l:<言語名> <URL>」を入力、実行
    <構成キー名>:Web.config の appSettings セクションで指定したい名前
    <言語名>:クラスファイルを記述する言語名(C# や Oxygene など)
    <URL>:Web サービス提供の URL (~.asmx など)

    例)wsdl  /urlkey:rdd /l:Oxygene http://localhost:2847/DataService.asmx

上記の通り実行すると、ソリューション エクスプローラ上には、クラスファイルが追加されます(出なければ更新してください)。

App_Code
図 手順3の例を実行した場合

このクラスファイルが、Web サービスへの接続に必要な情報をすべて含んでいます。

実際に開いてみると、コンストラクタ内で、Web.config に appSettings があればそれを利用し、無ければ URL で指定された Web サービスを参照するようなコードが書かれています。

[code lang=’delphi’] constructor DataService;
begin
var urlSetting: System.String := System.Configuration.ConfigurationManager.AppSettings[‘rdd’];
if (urlSetting <> nil) then begin
self.Url := urlSetting;
end
else begin
self.Url := ‘http://localhost:2847/DataService.asmx’;
end;
end;
[/code]

*

<Web.config への設定>

Wsdl.exe によって生成されたコードからもわかるとおり、Web.config 内の「<configuration>\<appSettings>」に、「構成キー」を追加します。

例えば、次の様なノードです。

[code lang=’xml’]
[/xml]

Web.config への記述であれば、インストーラなどで構成を変更しても良いですし、ユーザが後から直接変更をかけることも可能です。

*

<最後に>

開発と運用でサーバ情報が違う場合でも、Wsdl.exe を利用して Web.config と連携すれば、リコンパイルの必要なく環境の切替が簡単にできることがわかりました。

WCF(Windows Communication Foundation) の「リモート参照」を利用することで、より高い性能を得ることも可能なのですが、.NET Framework のバージョンに依存すると言うこともあり(WCF は3.0 以降)、今回は見送りました。

WCFの参考:@IT

ネットワークで連携するシステムは、まだまだいろいろあって面白いですね。

10年集客し続けられるサイトを、ワードプレスで自作する9つのポイント プレゼント

【最後まで読んでくれたあなたに】

あなたは、24時間365日、自分の代わりに集客し続けてくれるWebサイトを作りたい!と思ったことはありませんか?

私はこれまで500以上のWebサイトの構築と運営のご相談に乗ってきましたが、Webサイトを作ってもうまく集客できない人には、ある一つの特徴があります。

それは、「先を見越してサイトを構築していないこと」です。
Webサイトで集客するためには、構築ではなく「どう運用するか」が重要です。

しかし、重要なポイントを知らずにサイトを自分で構築したり、業者に頼んで作ってもらってしまうと、あとから全く集客に向いていないサイトになっていたということがよく起こります。

そこで今回、期間限定で
『10年集客し続けられるサイトをワードプレスで自作する9つのポイント』
について、過去に相談に乗ってきた具体的な失敗事例と成功事例を元にしてお伝えします。

・ワードプレスを使いこなせるコツを知りたい!
・自分にピッタリのサーバーを撰びたい!
・無料ブログとの違いを知りたい!
・あとで悔しくならない初期設定をしておきたい!
・プラグイン選びの方法を知っておきたい!
・SEO対策をワードプレスで行うポイントを知りたい!
・自分でデザインできる方法を知りたい!

という方は今すぐ無料でダウンロードしてください。

期間限定で、無料公開しています。

※登録後に表示される利用条件に沿ってご利用ください

コメントを残す