色々ありまして。
ちょっとしたお仕事上の都合で、現在 struts で用意している Java 製の API 群をどうすればリプレースしやすいか考えていてふと思いついたので試してみました。
やろうとしている事は簡単で、~.do で呼び出された際に Struts ではなく ASP.NET WebAPI で動作させるというものです。そうすることでアプリ側の改修なしにサーバー側をまるっとリプレースすることも選択肢とすることができます。
とりあえず WebAPI なプロジェクトを新規に用意します。今回はサンプルですので認証は利用しません。まず最初に行う事は WebAPI 用のコントローラの準備です。
今回は空の WebAPI コントローラを利用しますが、どれでも構いません。今回は次のような API を用意します。
1: Imports System.Net
2: Imports System.Web.Http
3:
4: Namespace Controllers
5: Public Class DoSampleController
6: Inherits ApiController
7:
8: <HttpGet>
9: Public Function Exec1() As String()
10: Return New String() {"Sample API", "8888"}
11: End Function
12:
13: End Class
14: End Namespace
これで API 本体は準備できたので、次に WebApiConfig の中で行われている WebAPI 用のルーティング設定を修正し、先ほどの API が呼び出されるようなルーティングを設定します。
1: Imports System
2: Imports System.Collections.Generic
3: Imports System.Linq
4: Imports System.Web.Http
5:
6: Public Module WebApiConfig
7: Public Sub Register(ByVal config As HttpConfiguration)
8: ' Web API の設定およびサービス
9:
10: ' Web API ルート
11: config.MapHttpAttributeRoutes()
12:
13: config.Routes.MapHttpRoute(
14: name:="DefaultApi",
15: routeTemplate:="ht/{action}.do",
16: defaults:=New With {.controller = "DoSample"}
17: )
18: End Sub
19: End Module
記載したのは 13 行目から 17 行目の部分で、http://(サーバー)/test/~.do とアクセスした際に呼び出されるような設定となります。
通常であればこれくらいで終わるのですが、今回は ~.do という形式にあるように、静的ファイルへのアクセスと近い形式になり、そのままでは IIS がデフォルトで対応していない拡張子の為、404 エラーとなってしまいます。
1: <system.webServer>
2: <handlers>
3: <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
4: <remove name="OPTIONSVerbHandler" />
5: <remove name="TRACEVerbHandler" />
6: <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
7: <add name="DoFileHandler" path="*.do" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
8: </handlers>
9: </system.webServer>
7 行目にて拡張子 .do に対して TransferRequestHandler を指定し、ASP.NET 側で処理を行えるように指定しています。この設定がないと、静的ファイルとして扱われることとなり HttpHandler を利用する方法で対応することになります。
このような感じで WebAPI を実装すると、.do なアドレスにアクセスすることで Struts 上の API と同様に WebAPI が呼び出されるようになるので、サーバーをまるっと入れ替えることも可能です。
0 件のコメント:
コメントを投稿