2013-07-04 13 views
10

現在、従来の.asmx Webサービスを使用しているWebアプリケーションを構築しています。これらをWebAPIにアップグレードする予定です。私はウェブ上を見回しましたが、私はこのアップグレードを行う最も簡単で最速の方法を探しています。 Webサービスは現在、多少のようになります。彼らの最も単純なレベルでasmxからwebAPIへのWebサービスのアップグレード

using System.Web.Services; 

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.Web.Script.Services.ScriptService] 
public class SomeWebServiceName : System.Web.Services.WebService 
{ 
    SomeObject TheObject = new SomeObject; 

    [WebMethod(EnableSession = true)] 
    public string GetSomeData(string Param1, string Param2) 
    { 
     return TheObject.HandleRequest(Param1, Param2); 
    } 

    [WebMethod(EnableSession = true)] 
    public string GetSomeMoreData(string ParamA) 
    { 
     return TheObject.HandleAnotherRequest(ParamA); 
    } 
} 

、彼らはオブジェクトをインスタンス化して、WebサービスのWebメソッドは、要求を処理するために、そのオブジェクトの上にいくつかのメソッドを呼び出します。クライアントで

は、私はこのようなアヤックス()でjqueryのを使用します。

$.ajax({ 
    url: "../WebServices/SomeWebServiceName.asmx/GetSomeData", 
    data: AjaxData, ....}); 

は、私がの.asmxやWebAPIのにアプリケーション全体をアップグレードするすべての参照を削除します。上のコードでこれを行う最も簡単な方法は何ですか?

答えて

8

@Venkat氏は次のように述べています。「直接答えるのは簡単ではありません。私はかなりの手作業によるコーディングなしで、しかし、私のようなコントローラを実装することをお勧めすることができますいくつかの仮定を作る:あなたはまた、(通常は「WebApiConfig.cs」で)ルートを登録する必要があり

public class SomeWebServiceNameController : ApiController 
{ 
    SomeObject TheObject = new SomeObject(); 

    public string GetSomeData(string Param1, string Param2) 
    { 
     return TheObject.HandleRequest(Param1, Param2); 
    } 

    public string GetSomeMoreData(string ParamA) 
    { 
     return TheObject.HandleAnotherRequest(ParamA); 
    } 

    [HttpPost] 
    public string PostSomeMoreData([FromBody]string ParamA) 
    { 
     return TheObject.HandleAnotherRequest(ParamA); 
    } 
} 

を:

public static void Register(HttpConfiguration config) 
{ 
    config.Routes.MapHttpRoute(
     name: "NumberedParametersAPI", 
     routeTemplate: "WebServices/{controller}/{action}/{Param1}/{Param2}" 
    ); 
    config.Routes.MapHttpRoute(
     name: "CharacterizedParametersAPI", 
     routeTemplate: "WebServices/{controller}/{action}/{ParamA}", 
     defaults: new { ParamA = RouteParameter.Optional } 
    ); 
} 

を私は最後の方法「PostSomeMoreData」を含めあなたの質問で指定したクライアント呼び出し(jQuery ajaxメソッド呼び出し)と一致するようにします。しかし、WebAPIのPOSTメソッドの原始的なパラメータはちょっと混乱していることに注意してください。これらのリンクをお読みください:

http://www.intstrings.com/ramivemula/articles/testing-asp-net-web-apiget-post-put-delete-using-fiddler/

http://yassershaikh.com/how-to-call-web-api-method-using-jquery-ajax-in-asp-net-mvc-4/

http://encosia.com/using-jquery-to-post-frombody-parameters-to-web-api/

+0

**/{アクション}/**プレースホルダは、Web APIで冗長です。 – Jude

1

直接回答するのは簡単ではありません。最初に、アプリケーションアーキテクチャがHTTP/RESTベースの呼び出しを実際にサポートすることを検証する必要があります。私の要求は、目的を明確にする必要があるWeb APIに移行する前です。

最も簡単な方法はわかりませんが、手動で移行するのは難しい方法です。 Webサービスにasmxメソッドの背後にあるクラスファイルがある場合、またはサービスに抽象化がある場合、抽象化を再利用してWeb APIに簡単にアップグレードできます。

は、Web APIについてのより良いアイデアを得ることができ、以下のリンクをご確認ください: http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and-WCF-REST-and-Web-Service.html

3

App_Start

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}/{id}", 
      new { id = RouteParameter.Optional, action = RouteParameter.Optional }); 
    } 
} 
を次WebApiConfigを追加し、コントローラ/アピフォルダの下に置き、以下のクラスを作成します。

コントローラCodee

public class SomeWebServiceNameController : ApiController 
{ 
    SomeObject TheObject = new SomeObject; 

    [HttpGet] 
    public string GetSomeData(string Param1, string Param2) 
    { 
     return TheObject.HandleRequest(Param1, Param2); 
    } 

    [HttpGet] 
    public string GetSomeMoreData(string ParamA) 
    { 
     return TheObject.HandleAnotherRequest(ParamA); 
    } 
} 

はREGIするのApplication_Start下global.asax.csで次の呼び出しを追加します。ステレオルート:

これは非常に簡単な説明で、おそらく文字列ではなくオブジェクトを返したいと思うでしょう。

関連する問題