在MVC 5中调用WCF Restful POST方法

时间:2016-07-19 14:47:33

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

我必须使用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应用程序中进行服务集成

1 个答案:

答案 0 :(得分:0)

现在我找到了我的问题的解决方案。 我为代理

创建了一个类
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;
    }
}
}

Bellow,从控制器调用服务代理

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服务集成