WebサービスでHelloWorldを表示するサンプル、及び手順。
1.仮想ディレクトリの作成
IISにWebサービスの配置先ディレクトリを作成する(Webアプリケーションとすること)
2.Webサービスの作成
2−1.Webサービスアプリの作成
VisualStadioを開き、「ファイル」→「新規作成」→「Webサイト」→「ASPWebサービス」でWebサービスを作成する
(「場所」→HTTP、1で設定した仮想ディレクトリにすること)
※上記の手順はVS2005の場合。2003とかだと少し違うみたい
2−2・ソースコードの作成
Service.vb (公開するメソッドの実装)
Imports System.Web Imports System.Web.Services Imports System.Web.Services.Protocols <WebService(Namespace:="http://tempuri.org/")> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ Public Class Service Inherits System.Web.Services.WebService <WebMethod()> _ Public Function HelloWorld() As String Return "Hello World" End Function End Class
Service.asmx (サービス名とソースのマッピング)
<%@ WebService Language="vb" CodeBehind="~/App_Code/Service.vb" Class="Service" %>
2−3.Webサービスのビルド
メニューの「ビルド」→「Webサービスのビルド」
※ビルド時に以下のエラーが発生した場合
「ASP.NET2.0に対するWebサイト'http://localhost/haradaWS'の構成に失敗しました。 このサイトが正しく動作するためには、ASP.NET2.0に対してこのサイトを手動で構成する必要があります」
.NetFrameWorkとIISのマッピングができていないのが原因。
以下のコマンドでIISとのマッピングを行う。
「".NETFramework のインストールフォルダ"\"バージョン"\aspnet_regiis.exe -i」
↓今回実行したコマンド
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i
3.Webサービスクライアントの作成
3−1.Webサービスの参照
メニューの「プロジェクト」→「Web参照の追加」→「ローカルコンピュータのWebサービス」で追加するWebサービスを選択する
※Web参照の追加時にイベントログに以下のようなエラーが発生。
Message: ファイルまたはアセンブリ 'System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'、またはその依存関係の 1 つが読み込めませんでした。 アクセスが拒否されました。
ASP.NET プロセス識別にグローバル アセンブリ キャッシュの読み取り権限がないため、 要求を実行できませんでした。エラー 0x80070005 アクセスが拒否されました。
→アクセス権の不足が原因。以下のフォルダにアクセス権が設定されていることを確認する。
%windir%\Microsoft.NET\Framework\Version\Temporary ASP.NET ファイル: フル コントロール
%windir%\Temp : フル コントロール
アプリケーション フォルダ(アプリの格納先) : 読み取り
%n installroot % 階層 (%windir%\Microsoft.Net\Framework\Version など): 読み取り
%windir%\Assembly : 読み取り (AssemblyはExplorerからアクセス権を変更できないのでcaclsを使うこと)
参考
3−2.ソースコードの作成
Form1.vb
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Web サービスのインスタンス生成 (クラス名[haradaWS]はWeb参照の追加時に指定する) Dim wsMyService As New haradaWS.Service ' Webサービスの呼び出し Button1.Text = wsMyService.HelloWorld End Sub End Class
3−3.実行、デバッグ
HeloWorldメソッド実行時に以下のエラーが発生
HTTP ステータス 401: Unauthorized で要求が失敗しました。
→アクセス権が不足していたのが原因。Webサービスの仮装ディレクトリをデスクトップ上(c:\Documents and Settings\・・・)にしていたので
C:\Inetpub\wwwrootに移したら解決。
※InetPub配下でない場合、権限の設定が必要みたい
今回はlocal上で動作するWebサービスだったが、サーバとクライアントがインターネット経由で接続される形態の場合、
セキュリティをもう少し細かく設定する必要があると思われる。
(IISのディレクトリセキュリティの箇所とか・・・)
参考
プロジェクト⇒Web参照の追加
http://msdn.microsoft.com/ja-jp/events/dd283294.aspx#winform_wscdev_cs-1
Webサービスの作成
http://msdn.microsoft.com/ja-jp/events/dd253121.aspx#webservice_auth_vb-3
動作確認環境:WindwosXP sp2,VisualStadio2005,.NetFrameWork2.0