【问题标题】:Call WCF Restful POST Method in MVC 5在 MVC 5 中调用 WCF Restful POST 方法
【发布时间】:2016-11-22 13:02:16
【问题描述】:

我必须使用 GET 和 POST 创建简单的 WCF Web 服务。请看下面的源代码

public interface ISample
{
    [OperationContract]
    [WebGet(UriTemplate = "/GetDEPT", RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json)]
    Task<IEnumerable<DEPT>> GetDEPT();

    [OperationContract]
    [WebInvoke(UriTemplate = "UpdateDEPT?Id={Id}&StatusId={StatusId}", Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    Task<bool> UpdateDEPT(List<DEPT> DEPT, string Id, string StatusId);
}

ISample 接口实现:示例

public class Sample: ISample
{
    public async Task<IEnumerable<DEPTt>> GetDEPT()
    {
        return await DEPTBO.GetDEPT();
    }

public async Task<bool> UpdateDEPT(List<DEPTt> DEPT, string Id, string StatusId)
    {
        return await DEPTBO.UpdateDEPTAsync(Id, DEPT, StatusId);
    }
} 

如何在 MVC 5 中调用这个 WCF Restful 服务?

请帮助我 MVC 应用程序中的服务集成

【问题讨论】:

    标签: asp.net-mvc http-post wcf-rest


    【解决方案1】:

    现在我找到了我的问题的解决方案。 我已经为代理创建类

    namespace WCF.WCFService
    {
    public static class WebService<T> where T : class
    {
        public static string appSettings = ConfigurationManager.AppSettings["ServiceURL"];
        public static IEnumerable<T> GetDataFromService(string Method, string param = "")
        {
            var client = new WebClient();
    
            var data = client.DownloadData(appSettings + Method + param);
            var stream = new System.IO.MemoryStream(data);
            var obj = new DataContractJsonSerializer(typeof(IEnumerable<T>));
            var result = obj.ReadObject(stream);
            IEnumerable<T> Ts = (IEnumerable<T>)result;
            return Ts;
        }
    }
    
    public static class WebServiceUpdate
    {
        public static string appSettings = ConfigurationManager.AppSettings["ServiceURL"];
        public static bool GetDataFromService_Update(string Method, List<CNHDataModel.CustomEntities.Port> portData, string param = "")
        {
            bool _res = false;
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<CNHDataModel.CustomEntities.Port>));
            MemoryStream mem = new MemoryStream();
            serializer.WriteObject(mem, portData);
            string data =
                Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length);
            WebClient webClient = new WebClient();
            webClient.Headers["Content-type"] = "application/json";
            webClient.Encoding = Encoding.UTF8;
            webClient.UploadString(appSettings + Method + param, "POST", data);
            _res = true;
            bool Ts = (bool)_res;
            return Ts;
        }
    }
    }
    

    下面,从控制器调用服务代理

    public class DEPTController : Controller
    {
        [ActionName("DEPTView")]
        public ActionResult DEPTViewAsync()
        {
    try
    {
                IEnumerable<DEPT> DEPT = CNHService.WebService<DEPT>.GetDataFromService("GetDEPT");
    
                if (port == null)
                {
                    return HttpNotFound();
                }
                IEnumerable<Status> Status = CNHService.WebService<Status>.GetDataFromService("GetStatusAsync");
                if (port == null || Status == null)
                {
                    return HttpNotFound();
                }
            }
            catch (Exception ex)
            {
    
            }
            return View();
        }
    
    
    
    [HttpPost]
        [ActionName("DEPTView")]
        public ActionResult DEPTViewAsync([Bind(Include = "id,Statusid")] DEPT DEPTMENT)
        {
            try
            {
                List<DEPT> objDEPT = Session["DEPTItems"] as List<DEPT>;
                List<DEPTStatus> objStatus = Session["DEPTIStatus"] as List<PortStatus>;
                ViewBag.DEPTList = new SelectList(objDEPTt, "id", "Name");
                ViewBag.DEPTStatusList = new SelectList(objStatus, "id", "Name");
                if (ModelState.IsValid)
                {
                    WebServiceUpdate.GetDataFromService_Update("UpdateDEPT", objDEPT, "?Id=" + DEPTMENT.Id + "&StatusId=" + DEPTMENT.Statusid);
                    setting.Message = true;
                }
                else
                {
                    return View(setting);
                }
    
            }
            catch (Exception ex)
            {
    
            }
            return View(setting);
    
    }
    }
    

    我希望这段代码对 MVC 5 中的 WCF Restful 服务集成有所帮助

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 2018-09-13
      • 2012-06-16
      • 2016-01-09
      相关资源
      最近更新 更多