テスターですが何か?

ホビープログラマ略してHPです

WCFでREST Webサービスを作成する

leave a comment »

「東京電力 節電効果計測サイト」を更新しようとしたときの悩み。

・外部から電力使用量データを定期的に取得するバッチを作成したい

・Visual Basic ExpressEditionでつくったコンソールアプリケーションからSQLServerに接続するEntiryFrameworkを使用できない

・外部からデータは取得できるけど、SQLServerに入れられないじゃん!

・データベースアクセス部分をWCFで作れば?

・(‘A`)マンドクセ デバッグしにくいし

・あ、じゃ、WCFでバッチ作るか、REST WebサービスにすればHTTPリクエストだけでバッチじっこうできるし

 

ということで、WCFでREST Webサービスを作ることにしました。

1.まずは普通にWCF Webサービスプロジェクトを作成します。一旦ビルドして、DLLを作成しておきます。

image

 

2.Web.configを変更するための設定を行います。

普通にテキストエディタで変更してもいいんですが、専用のツールがあるのでWCF構成エディタを使用します。WCF構成エディタ使用してWeb.configを変更するための設定を行います。ソリューションエクスプローラーから「Web.config」を右クリックして、「ファイルを開くアプリケーションの選択」を実行します。

image

「追加」ボタンをクリックします。

image

ファイルを開くアプリケーションにWCF構成エディタを追加します。自分の環境では以下のように入力します。各環境で「SvcConfigEditor.exe」を検索してください。

プログラム名: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\SvcConfigEditor.exe

表示名: WCF構成エディタ

image

 

3.ここからWeb.configを実際に変更します。

左ペイン(構成)から、[詳細設定]-[エンドポイント動作]を選択し、右ペイン(エンドポイント動作)から[新しいエンドポイント動作の構成]をクリックします。

image

4.Nameに「webHttpBehavior」(任意)、動的要素の拡張の位置に「webHttp」を選択します。

image

5.左ペイン(構成)のサービスを右クリックし[新しいサービス]を選択します

image

6.Nameは[…]をクリックし、Webサービスのアセンブリから、型を選択して入力します。

image

image

image

型(この場合は、LightElectricityService.Service1)が自動的に入力されます。

image

7.左ペイン(構成)の[サービス]-[サービス名]-[エンドポイント]を右クリックし[新しいサービスエンドポイント]を選択します。

image

8.エンドポイントの情報を入力します。

  • Address: /
  • BehaviorConfiguration: webHttpBehavior(4.で入力した内容)
  • Binding: webHttpBinding
  • Contract: LightElectricityService.IService1

image

9.[ファイル]-[保存]を実行してWeb.configの編集は完了です。Web.configのファイルはこのようになりました。太字の部分がツールで編集した部分です。

——————

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="LightElectricityService.Service1">
        <endpoint address="/" behaviorConfiguration="webHttpBehavior"
          binding="webHttpBinding" name="" contract="LightElectricityService.IService1" />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webHttpBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
 
</configuration>

 

10.最後にインターフェースの変更を行います、コントラクトのUri指定を追加します。追加したのは下線部分です。Uriの指定は任意ですが、メソッド名と同じにしておいたほうが分かりやすくていいと思います。

<ServiceContract()>
Public Interface IService1

    <OperationContract()> _
    <WebGet(UriTemplate:="GetData?date={value}")>
    Function GetData(ByVal value As Integer) As String

End Interface

 

11.以上でサービスの作成は完了です。

デバッグ実行して、「http://localhost:[PortNo]/Service1.svc/GetData?Date=20110326」と入力すすると実行結果を確かめることができます。Web.configの内容とインターフェースファイルの記述と比較してみてください。

image

 

今回の内容は以上です。今回のエントリ作成に当たって参考にしたサイトは以下です。

[WCF アプリ4 RESTサービス] サービスの変更
REST スタイルなWCF

Written by david9142

2011年3月26日 @ 10:49 PM

カテゴリー: LightElectricity

Tagged with , ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。