WebサービスでHelloWorld


WebサービスでHelloWorldを表示するサンプル、及び手順。



1.仮想ディレクトリの作成


IISWebサービスの配置先ディレクトリを作成する(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を使うこと)



参考

http://support.microsoft.com/kb/833444/ja

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