セキュア通信を介してWCFサービスをIIS7.0上で公開します。インターネットで公開するサービスをモデルとして考えているので、暗号化はトランスポートレベルで行い、資格情報の認証はメッセージレベルで行います。認証はWindows統合認証ではなく、ユーザ認証にSqlMemberShipProviderを使用し、ユーザロールはSqlRoleProviderを使用します。

確認環境は次のとおり

  • Windows Vista Enterprise スタンドアロン(WCFサービスはIIS7.0上でホスト,クライアントは今回作成しない)
  • 開発環境 Visual Studio 2008 Professional
  • .NET 3.5

1.ソリューションの作成

Visual Studio 2008上で空のソリューションを作成し名前をWCFSample012とします。新規作成されたソリューションを右クリックし、[Add]→[New Project]をクリックしプロジェクトのテンプレートにWCF Service Applicationを選択肢、WCSample012ProductServiceという名前でプロジェクトを作成します。

 

 

 次に、WCFサンプル再作成(ブラッシュアップ) からWCFSample.ConsoleClient,WCFSample.ProductServiceプロジェクトのフォルダをコピーし、WCFSample012ソリューションのフォルダ直下にコピーし、既存のプロジェクトとして追加します。
WCFSample012ProductServiceプロジェクトを右クリックし、Add Referenceを選択後、Add ReferenceダイアログでWCFSample.ProductServiceプロジェクトへの参照を追加します(下図参照:フォーカスはConsoleCliantにあたっていますが、ProductServiceを選択してOKを押してください)。

 

 

WCFSample012ProductService作成時に自動作成されたIService1.cs,Service1.svcを物理削除し、プロジェクトの新規作成でText Fileを選択肢、ProductService.svcというファイル名でファイルを作成します。

 

 

ProductService.svcを開き次のコード1行を記述して保存します。

<%@ ServiceHost Language="C#" Debug="true" Service="WCFSample.ProductService.ProductService"  %>

2. WCFサービスの構成編集

WCFSample012ProductServiceのWeb.configを開き、<system.serviceModel>..</system.serviceModel>で囲まれたWCFサービスの設定を一度すべて削除した後、WCF Service Configuration Editorで編集します。

2.1 Serviceの作成

左側ペインのServicesを選択し、右側ペインのCreate  a New Serviceをクリックし、新しいServiceを作成するウィザードを起動します。

最初のダイアログでService typeにWCFSample.ProductService.ProductServiceを記述して[Next]ボタンクリック。

 

 

次のダイアログでエンドポイントのコントラクトにWCFSample.ProductService.IProductServiceを入力。[Next]ボタンクリック。

 

 

次のダイアログでHTTPを選択し[Next]ボタンクリック。(バインディングコンフィグレーションが構成されている場合は以下のダイアログの前にバインディングをセットする画面が表示されます。その場合はデフォルトのまま[Next]ボタンを押して、本ダイアログに遷移します。

 

 

次のダイアログでAdvanced Web Services interoperabilityを選択、それ以外はデフォルトのまま[Next]ボタンクリック。

 

 

次のダイアログではサービスのアドレスを定義します。今回はIIS7.0でホストされるので、入力したアドレスは無視されます。空白にして[Next]ボタンクリック。

 

 サービスの構成確認ダイアログが表示されるので、OKボタンを押してダイアログを閉じます。

2.2Binding Configurationの構成

WCF Service Configuration Editorの左側ペインのBindingsを選択します。右側ペインのNew Binding Configurationをクリックし、新しいバインディングの構成を作成します。

 

 

最初に表示されるダイアログでwsHttpBindingを選択して[OK]ボタンをクリックします。

 

 

右側ペインのNameをProductServiceWSBindingConfigと入力し、Securityタブを選択後、modeをTransportWithMessageCredential(トランスポートレベルで暗号化を行い、Messageレベルで認証を行う)を選択します。MessageClientCredentialTypeをUserNameとしユーザID,パスワードで認証するようにします。TransportClientCredentialTypeをNoneにします。認証はSqlMembershipProviderで行うように次のサンプルで設定します。

 

 

左側ペインのServices→Endpoints→(Empty Name)バインディングを選択し、BindingをwsHttpBinding,BindingConfigurationをProductServiceWSBindingConfigに設定します。

 

 

 

2.3 Service Behaviorの構成

左ペインのAdvanced→Service Behaviorsを選択し、右側ペインのNew Services Behavior Configurationをクリックして、NameをProductServiceBehaviorとしてService Behaviorを構成します。右ペインの[Add]ボタンクリックしてserviceMetadataを追加します。下の画面ではserviceDebugも追加しています。左側ペインでserviceMetadataを選択してHttpsGetEnabledをtrue,HttpGetEnabledをfalseにします。IIS上でホストされるのでHttpsGetUrlは指定する必要はありません。

 

 

 

 

最後に、左ペインのServicesを展開しWCFSample.ProductService.ProductServiceを選択し、BehaviorConfigurationをProductServiceBehaviorにセットします。

 

 

変更内容を上書き保存して、WCF Service Configuratrion Editorを閉じます。

3.IISの設定

[Administrative Tools]→[Internet Information Service Managerを実行します。

3.1 httpsバインディング構成の追加

左側ペインのマシン名→[Sites]→[Default Web Site]と展開し、[Default Web Site]を右クリックして[Edit Bindings]をクリックします。表示されるSite Bindingsダイアログの[Add]ボタンをクリックします。
※3.1の処理はhttpsの構成ができている場合は行う必要がありません。

 

 

Typeにhttpを選択、SSL certificateにWCF Sample 009 : BasicHttpBindingでトランスポートレベルセキュリティを実装する で作成した証明書HTTPS-TestServerを選択。そのほかはデフォルトのまま[OK]ボタンをクリックします。

 

 

Site Bindingsダイアログに遷移し[Close]ボタンでダイアログを閉じます。

3.2 サイトの登録とhttps通信の設定

 Visual Studioで作成したサイトを登録します。IIS Manger上の左側ペインのDefault Web Siteを右クリック→[Add Application]でWCFSample012で作成したWCFサービスのWCFSample012ProductServiceプロジェクトのフォルダのパスをPhysical pathとして登録します。下図ではサイト名をWCFSample012として登録しています。

 

 

アプリケーションとして登録後、中心のペインの画面をFeatures Viewを表示し(ペインの下側のボタンでFeature,Content Viewを切り替える)、SSL Settingsをダブルクリックします。ペインの表示内容が切り替わるので、Require SSLにチェックします。そのほかはデフォルトのままとします。

 

 

以上でhttpsでWCFサービスを公開する構成は完了です。

 4.動作確認

今回はまだクライアントを作成していないので、IEでアクセスして確認します。

アクセスするURL:https://localhost/WCFSample012/ProductService.svc

Vista上のIE7.0でアクセスすると次の画面が表示されます。これはmakecertコマンドで作成された証明書が信頼された認証局から発行された証明書ではないためです。製品環境では使用しないで下さい。IE6.0からアクセスした場合は、Security Alertのダイアログが表示されると思います。

 

 

今回は無視してContinue to this website (not recommended)を選択すると次のように表示されます。

 

https://localhost/WCFSample012/ProductService.svc?wsdlにアクセスすると次のように表示されます。

以上でIIS7.0でホストされ、セキュア通信を利用するWCFサービスの構成は完了です。次のサンプルでSqlMemberShipProviderを使用した認証のための構成とクライアントの作成を行います。

間違い、指摘とうがあればご連絡ください。