Webサービスを作成する方法を説明します。次回はAjaxについて説明する予定ですので、その準備です。サービス」などで説明されています。2005を使ってWebサービスを作成する方法を順を追って説明します。.NETでもほぼ同様です。1.メニューの[ファイル]-[新規作成]-[Webサイト]などにより、「新しいWebサイト」ダイアログを表示します。Webサービス」を選択し、OKボタンをクリックします。3.作成されたWebサイトには、「Service.asmx」と「App_Code/Service.cs」(VB.NETの場合は、「App_Code/Service.vb」)と「web.config」(VB.NETの場合のみ)が作成されています。「Service.asmx」の中身は、次のようになっています。%>つまり、コードビハインドとなっており、本体のコードはApp_Codeディレクトリの「Service.cs」や「Service.vb」に記述します。これらのファイルの中身は、初期状態で次のようになっています。1.1以下ではWebServiceBindingAttributeとDesignerGeneratedAttributeはサポートされていません。補足:「別のファイルにコードを書き込む」をオフにしてWebサービスを作成したときは、作成されたクラスにDesignerGeneratedAttribute属性は適用されません。4.これですでに立派なWebサービスが作成されています。現時点では、「http://tempuri.org/」という名前空間の「Service」という名前のWebサービスに、「HelloWorld」というWebサービスメソッドが一つあるだけです。5.これに独自のWebサービスメソッドを追加してみましょう。ここでは送信された文字列を大文字に変換して返す「ToUpper」というWebサービスメソッドを追加します。HelloWorldメソッドと同様に、Serviceクラスにプロパティメソッドを追加し、WebMethodAttribute属性を適用します。追加するメソッドのコードは次のようなものです。str.ToUpper();}6.さらにXML名前空間を独自のものに変更します。ここでは、XML名前空間を「https://dobon.net/services/」に変更します。XML名前空間はWebServiceAttribute属性のNamespaceプロパティで変更できます。Namespaceプロパティを指定しなかった場合は、「http://tempuri.org/」となります。このようにして変更された「Service.cs」や「Service.vb」は次のようになります。}}7.Webブラウザで「Service.asmx」のURLを開くと、「サービスヘルプページ」と呼ばれるHTMLページが表示されます。このページには、Webサービスに関する様々な情報が表示されます。Studioでこのページを表示させるには、F5キーや、ツールバーの「デバッグの開始」ボタンを押してデバッグを開始するか、ソリューションエクスプローラで「Service.asmx」を右クリックして、コンテキストメニューから「ブラウザで表示」を選択します。サービスヘルプページでは、サポートされているWebサービスメソッドの一覧や、それぞれのメソッドの使用可能なプロトコル別の要求とその反応の例を見ることができます。POSTを使用したテストを行うこともできます。8.このように作成されたWebサービスは、SOAPに対応しています。このWebサービスのWSDLは、次のようなURLで取得できます。http://localhost/Service/Service.asmx?WSDLつまり、ASMXのURLの末尾に「?WSDL」を付加したものとなります。このURLへのリンクは、サービスヘルプページの「サービスの説明」の箇所にあります。Studioを使わない場合も、上記で紹介したようなファイルを自分で用意すれば、全く問題ありません。前と全く同じでは面白くありませんので、コードビハインドとしないで、ASMXファイルにコードも書いてしまう例を示します。以下の内容を拡張子が".asmx"のテキストファイルとして保存してください。}}基本的な事柄の説明は以上です。ここからは上記で示したコードに登場した属性などについて、簡単に説明します。†Webサービスを実装したクラスには、WebServiceAttribute属性を適用します。WebServiceAttributeのNamespaceプロパティには、XML名前空間を指定します。省略した場合は、「http://tempuri.org/」となります。XML名前空間が「http://tempuri.org/」のままだと、サービスヘルプページで詳しい説明と共に、名前空間を変更するように勧められます。WebServiceAttribute.Nameプロパティには、Webサービスの名前を指定します。省略すると、クラスの名前と同じになります。WebServiceAttribute.Descriptionプロパティには、Webサービスの説明を指定することができます。2005からは、始めに作成されるWebサービスクラスにWebServiceBindingAttribute属性が適用されます。1.1に準拠していることを示します。Webサービスメソッドとするメソッドは、パブリックとして、WebMethodAttribute属性を適用します。Descriptionプロパティには、メソッドの説明を指定します。MessageNameプロパティには、Webサービスメソッドに使用される名前を指定します。このプロパティを使って、Webサービスクラスに同じメソッド名の複数のオーバーロードが存在する時に、メソッドの名前を変えることなく、Webサービスメソッドの名前がダブることを防ぐことができます。キャッシュを有効にするWebMethodAttribute.CacheDurationプロパティを使用することにより、応答のキャッシュを有効にできます。CacheDurationプロパティには、応答をキャッシュ内に保持する秒数を指定します。キャッシュの保持期間中は、要求が同じならば、同じ結果を返します。MSDNには、キャッシュ機能を使う際の注意事項が幾つか示されています。キャッシュを有効にすると、要求と応答のデータはメモリに保存されるため、要求や応答のデータが巨大であったり、要求の変更幅が大きい場合は、注意が必要です。POSTでは、通常、キャッシュは行われません。POSTが使われているため、キャッシュの効果は確認できません。false;に変更します。"Cache-Control"が"no-cache"となっているHTTPヘッダが見つかった場合はキャッシュは無効となります。セッション状態を保存するWebサービスでも、WebService.Sessionプロパティを使ってセッション状態の保存と取得を行うことができます。WebMethodAttribute.EnableSessionプロパティをtrueとしたメソッドでしかセッションは使用できません。これとは別に、アプリケーション状態の保存と取得を行うWebService.Applicationプロパティも使用できます。これは、EnableSessionプロパティに関係なく、使用できます。GETとPOSTもサポートされています)。GETやPOSTをサポートするには、Machine.configまたはWeb.configファイルに<protocols>の<add>要素を追加します。</system.web></configuration>逆にプロトコルのサポートを無効にするには、<remove>要素を使用します。add要素とremove要素のname属性には次のようなオプションがあります。SOAPのサポートを制御する。GETのサポートを制御する。1.1以上ではデフォルトで無効。POSTのサポートを制御する。1.1以上ではデフォルトで無効。POSTのサポートを制御する。サービスヘルプページを表示するか。GETを有効にしたWebサービスにアクセスするには、ASMXファイルのURLの後に「/(メソッド名)」を付けたものを要求先の基本的なURLとして、この後に「?」とクエリーパラメータを続けます。クエリーパラメータは「(パラメータ名)=(値)」の形式で、複数のパラメータは「&」で区切ります。パラメータ名と値は必要に応じてURLエンコードします。Service.asmxのToUpperメソッドをパラメータ値を「abcde」として呼び出すには、次のようにします。POSTの場合も同様に、ASMXファイルのURLの後に「/(メソッド名)」を付けたものを要求先のURLとして、パラメータを送信します。†ASMXファイルをWebブラウザで開くとサービスヘルプページが表示されますが、これを表示されないようにするには、上記と同じように、<protocols>の<remove>要素をMachine.configまたはWeb.configファイルに追加します。</system.web></configuration>しかしこれでは、WSDLの生成も無効になります。WSDLを有効にしたままサービスヘルプページの表示を無効にするには、<wsdlHelpGenerator>要素を使って、ASMXファイルに直接アクセスした時に別のページが表示されるようにします。次の例では、デフォルトのサービスヘルプページの代わりにblank.htmlを表示するようにしています。複数のデータを返すWebサービスメソッドが必要な場合は、それらのデータを格納できるクラスや構造体を作成して、メソッドの戻り値の型として使用するようにします。†Webサービスメソッドから例外をスローする場合は、SoapExceptionをスローし、Webサービスメソッドを呼び出したクライアントでも、SoapExceptionをキャッチします。WebサービスメソッドからSoapException以外の例外がスローされた場合は、SoapExceptionに変換されて、クライアントにスローされます。SoapExceptionでは、次のようなプロパティを設定できます。Messageプロパティには、例外の説明をするメッセージを指定します。Codeプロパティには、SOAP違反コードの種類を指定します。クライアントの呼び出し方に問題があれば、SoapException.ClientFaultCodeを指定します。SoapException以外の例外がスローされた場合は、CodeにSoapException.ServerFaultCodeが設定されます。Actorプロパティには、通常、WebサービスメソッドのURLを指定します。Detailプロパティには、エラーの詳細を設定します。Webサービスメソッドから例外をスローする例を以下に示します。SoapException("パラメータが空です。SoapException("パラメータが空です。str.ToUpper();}上記の例では、Message、Code、Actorプロパティを設定しています。サービスでの例外の処理およびスロー」等をご覧ください。