2013-07-04 12 views
10

से एक वेब सेवा का उन्नयन करना मैं एक वेब ऐप बना रहा हूं जो वर्तमान में पारंपरिक .asmx वेब सेवाओं का उपयोग करता है और मैं इसे वेबएपीआई में अपग्रेड करना चाहता हूं। मैंने वेब पर चारों ओर देखा है लेकिन मैं इस अपग्रेड को करने का सबसे आसान/तेज़ तरीका ढूंढ रहा हूं। वेब सेवाओं वर्तमान में इस तरह कुछ हद तक देखने के लिए: अपने सरलतम स्तर परएएसएमएक्स से वेबएपीआई

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); 
    } 
} 

, वे एक वस्तु और उसके बाद वेब सेवा कॉल उस वस्तु पर कुछ विधि अनुरोधों को हैंडल करने की वेब तरीकों का दृष्टांत।

ग्राहक पर, मैं .ajax() इस तरह के साथ jQuery का उपयोग करें:

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

मैं .asmx और वेबएपीआई करने के लिए पूरे आवेदन उन्नत करने के लिए किसी भी संदर्भ निकालना चाहते हैं। ऊपर दिए गए कोड के साथ ऐसा करने का सबसे आसान तरीका क्या है?

उत्तर

8

जैसा कि @ वेनकट ने कहा: "सीधे जवाब देना आसान नहीं है"; मेरा मतलब है, मैन्युअल कोडिंग की काफी मात्रा के बिना; (आमतौर पर "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 विधि कॉल)। लेकिन ध्यान रखें कि वेबएपीआई की पोस्ट विधि में आदिम पैरामीटर थोड़ा उलझन में हैं। कृपया इन कड़ियों पढ़ें:

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

**/{कार्रवाई}/** प्लेसहोल्डर वेब एपीआई में अनावश्यक हैं। – Jude

1

सीधे उत्तर देना आसान नहीं है। आइए सबसे पहले अपने एप्लिकेशन आर्किटेक्चर को सत्यापित करने की आवश्यकता है, वास्तव में HTTP/REST आधारित कॉल का समर्थन करेगा। मेरा अनुरोध वेब एपीआई में माइग्रेट करने से पहले है, उद्देश्य को स्पष्ट करने की जरूरत है।

मुझे यकीन नहीं है कि सबसे आसान तरीका है, लेकिन मैन्युअल रूप से माइग्रेट करना कठिन तरीका है। यदि आप वेब सेवाओं में एएसएमएक्स विधियों के पीछे कक्षा फाइलें हैं या आपके पास अपनी सेवाओं के लिए अमूर्तता है, तो हम वेब एपीआई में अपग्रेड करने के लिए आसानी से अमूर्तता का पुन: उपयोग कर सकते हैं।

नीचे दिए गए लिंक की जांच करें आप वेब एपीआई के बारे में एक बेहतर विचार प्राप्त कर सकते हैं: 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); 
    } 
} 

Application_Start तहत global.asax.cs में निम्नलिखित कॉल जोड़ें रेगी को मार्ग Ster:

WebApiConfig.Register(GlobalConfiguration.Configuration); 

यह एक बहुत ही सरल व्याख्या है, और आप शायद स्ट्रिंग के बजाय एक वस्तु वापस करना चाहते हैं, लेकिन वह यह करना चाहिए।

संबंधित मुद्दे