WSDL ファイルに基づいた Web サービス エンドポイント

更新 : 2007 年 11 月

コントラクト ドリブンの方法を使用して、サービスの動作を定義できます。このタスクを実行するには、Web サービス記述言語 (WSDL: Web Services Description Language) ファイルから Web サービス プロバイダ エンドポイントを作成します。既存の Web サービス プロバイダ エンドポイントを WSDL ファイルに準拠させることもできます。

Bb385701.alert_note(ja-jp,VS.90).gifメモ :

これらのタスクを実行するには、.disco ファイルを使用します。このリリースでは、1 つの WSDL バインディングを格納している WSDL ファイル、および 1 つの Web サービスを参照する .disco ファイルだけをサポートします。詳細については、「アプリケーション間の通信」を参照してください。

詳細については、以下のセクションを参照してください。

  • WSDL ファイルから Web サービス エンドポイントを作成する

  • Web サービス エンドポイントを WSDL ファイルに準拠させる

  • WSDL ファイルに基づいた Web サービス エンドポイント

  • 操作シグネチャで参照されるカスタム型

コントラクト ドリブンのサービス デザインの詳細については、MSDN オンライン (https://go.microsoft.com/fwlink/?LinkId=49584) の「Contract First Web Services Interoperability」ページを参照してください。

WSDL ファイルから Web サービス エンドポイントを作成する

ASP.NET アプリケーションおよびシステム上で WSDL ベースのエンドポイントを作成できます。このエンドポイントは、アプリケーションまたはシステムに表示されます。エンドポイントには、WSDL ファイルによって参照される操作シグネチャが設定されます。関連付けられたアプリケーションが既に実装されている場合、操作シグネチャは Web サービス クラス ファイルにも表示されます。シグネチャがカスタム型を参照する場合は、アプリケーションのプロジェクトにはその他のクラス ファイルも表示されます。詳細については、「操作シグネチャで参照されるカスタム型」を参照してください。

Bb385701.alert_note(ja-jp,VS.90).gifメモ :

実装できるのは、アプリケーションだけです。システムは実装できません。

WSDL ファイルから Web サービス プロバイダのエンドポイントを作成すると、/server オプションを付けて Wsdl.exe コマンド ライン ユーティリティを実行した場合と同じ結果が得られます。詳細については、以下を参照してください。

Web サービス エンドポイントを WSDL ファイルに準拠させる

既存の Web サービス プロバイダ エンドポイントを WSDL ファイルに準拠させることができます。この操作では、WSDL ファイルに準拠させる形で既存の操作シグネチャを追加または変更します。関連付けられたアプリケーションが既に実装されている場合、この操作を行うと、コード内の操作シグネチャや型名に影響することがあります。ただし、データセット内で入れ子にされた型については、準拠の対象になりません。

Bb385701.alert_note(ja-jp,VS.90).gifメモ :

エンドポイントをシステムのメンバに準拠させると、実質的に、基になるエンドポイント定義に準拠させることになります。この操作により、その定義の他のシステム定義におけるユースが変更されます。

メソッド本体のコードは変更されませんが、操作シグネチャや型名の変更が原因で、メソッド本体のコードがコンパイルされなくなる場合があります。そのため、コードをレビューし、コンパイラ エラーの修正に必要な変更を特定します。詳細については、「Web サービス エンドポイントを WSDL ファイルに準拠させた後のコード変更」を参照してください。

WSDL ファイルに基づいた Web サービス エンドポイント

WSDL ファイルは Web サービスの提供および使用に関する要件を指定します。プロバイダとコンシューマ間のコントラクトとして機能します。同じバージョンの WSDL ファイルに基づく Web サービス エンドポイントは、置き換え可能になります。詳細については、「代替となる Web サービス エンドポイント」を参照してください。

WSDL ファイル内の WSDL バインディング定義は、Web サービスによって提供される操作を記述します。Web サービス プロバイダ エンドポイントは、この WSDL バインディングを表します。関連する ASP.NET アプリケーションで WSDL ファイル生成が有効になっていると、Visual Studio はそのアプリケーションの Web サービスごとに新しい WSDL ファイルを生成します (アプリケーションが実装された場合)。Visual Studio はこの WSDL ファイルを使用して、関連する Web サービス コンシューマ アプリケーションの Web 参照を生成します (Web サービス コンシューマ アプリケーションが実装された場合)。詳細については、「方法 : ASP.NET Web サービスの WSDL ファイルの生成を制御する」を参照してください。

Web サービスに対応する WSDL ファイルが公開された後で Web サービス定義に加えられる変更は、新しい WSDL バインディングと見なされます。

Bb385701.alert_note(ja-jp,VS.90).gifヒント :

Web サービス定義を変更するときは、WSDL バインディング名と WSDL バインディング名前空間のいずれかまたは両方を変更する必要があります。Web サービス定義だけを変更し、その WSDL バインディング名や名前空間を変更しないと、接続されている、または以前に接続されていたアプリケーションと、Web サービスとの互換性がなくなったことが示されない場合があります。WSDL サービス名および WSDL バインディング名の既定値は "WebServiceN" です。"N" は序数を表します。ただし、アプリケーションを実装した後で Web サービス クラス ファイルから WSDL バインディング名を削除すると、既定値は "WebServiceNSoap" に変わります。WSDL サービス名前空間と WSDL バインディング名前空間の既定値は "http://tempuri.org" です。WSDL サービスの記述および WSDL バインディングの場所のプロパティには既定値がありません。WSDL バインディング名の既定値は "WebServiceN" です。

未実装の Web サービス プロバイダ エンドポイントの WSDL バインディング名またはバインディング名前空間を変更すると、それに接続されている未実装のコンシューマ エンドポイントの対応するプロパティは、自動的に更新されるか再接続時に更新されます。これに対して、実装済みの Web サービス プロバイダ エンドポイントでこれらのプロパティを変更すると、それに接続された実装済みの Web サービス コンシューマ エンドポイントは直ちに更新されません。ただし、このようなコンシューマ エンドポイントのプロパティを手動で更新できます。

操作シグネチャで参照されるカスタム型

Web サービス エンドポイントの操作シグネチャは、CLR クラスを参照することがあります。この CLR クラスは、WSDL ファイルや関連する XML スキーマ ファイルで参照されている XML 複合型の XML シリアル化を処理します。関連するアプリケーションがまだ実装されていない場合、Visual Studio は、実装時にこれらのクラスのコード ファイルを生成します。これらのファイルは、対応する Web サービス ファイルおよびアプリケーション プロジェクト ファイルと共に生成されます。アプリケーションが実装済みの場合、これらのクラスのコード ファイルは既存のプロジェクトに追加されます。詳細については、「アプリケーション ダイアグラムでの ASP.NET アプリケーションの概要」を参照してください。

Bb385701.alert_note(ja-jp,VS.90).gifメモ :

WSDL ベースの Web サービス エンドポイントを他のアプリケーションにコピーすると、Visual Studio では操作シグネチャだけがコピーされます。コピー先のアプリケーションが実装済みの場合、追加の CLR クラスのコード ファイルはコピーされません。コピー先のアプリケーションがまだ実装されていないと、実装時にも、これらのクラスのコード ファイルは生成されません。この状況を回避するには、コピーするエンドポイントに使用されているのと同じ WSDL ファイルまたは .disco ファイルからエンドポイントを作成します。

一部の XML スキーマでは、Web サービス クラスおよびデータ シリアル化クラスに追加のシリアル属性を指定して、XML が正しく書式設定されるようにする必要があります。ただし、WSDL ベースの Web サービス プロバイダ エンドポイントは、このようなシリアル化属性のごく一部しかサポートしません。限られた場合ですが、生成される Web サービス エンドポイント用の WSDL ファイルと XML メッセージは、Web サービス プロバイダ エンドポイントを作成するために使用した元の WSDL ファイルと矛盾することがあります。

Bb385701.alert_note(ja-jp,VS.90).gifヒント :

このような問題が発生した場合は、WSDL ファイルから Web サービス プロバイダ エンドポイントを作成する代わりに、Wsdl.exe ユーティリティを使用して Web サービス クラスとデータ シリアル化クラスを生成できます。ただし、生成されたコードをプロジェクトに手動で追加し、必要な .asmx ファイルを作成する必要があります。Web サービス プロバイダ エンドポイントが正しく表示されます。これで、デザイナを使ってエンドポイントを編集できるようになります。

このようなシリアル化属性のサポートに関する詳細な情報を以下の一覧に示します。

  • SerializableAttribute、SoapTypeAttribute、XmlIncludeAttribute、XmlRootAttribute、および XmlTypeAttribute の XML シリアル化属性は、XML 複合型を対象として生成されたクラスに追加されます。

  • XmlAnyAttribute、XmlArrayAttribute、XmlArrayItemAttribute、XmlAttributeAttribute、XmlChoiceIdentifierAttribute、XmlElementAttribute、XmlEnumAttribute、XmlIgnoreAttribute、XmlNamespaceDeclarationsAttribute、および XmlTextAttribute の XML シリアル化属性は、クラス フィールドに追加されます。

  • シリアル化属性は、Web メソッドの戻り値の型に適用されません。

  • シリアル化属性は、Web メソッドのパラメータに適用されません。

  • SoapElementAttribute、SoapIgnoreAttribute、SoapAttributeAttribute、SoapAttributeOverrides、SoapAttributes、SoapEnumAttribute、および SoapIncludeAttribute の SOAP でエンコードされた各シリアル化属性は、このようなクラスに適用されません。

  • XML 複合型が必要な属性の引数は、型の完全修飾名で文字列型として生成されます。その結果、コンパイラ エラーが発生するため、修正が必要です。

    たとえば、Visual Basic では <XmlIncludeAttribute(GetType("ClassName"))> が <XmlIncludeAttribute("ClassName")> として生成されますが、Visual C# では [XmlIncludeAttribute(typeof("ClassName"))] が [XmlIncludeAttribute("ClassName")] として生成されます。

参照

処理手順

方法 : エンドポイントをアプリケーションに追加する

方法 : Web サービス エンドポイントを WSDL ファイルに準拠させる

概念

アプリケーションのエンドポイントの概要