分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

WCF宿主asp.netMVC 并且发布restfull接口数据

发布时间:2023-09-06 02:01责任编辑:苏小强关键词:MVC

项目中需要同时用到WCF的SOAP接口和RESTFul Service,查了下资料发现WCF可以支持发布两种服务接口,整理资料如下

1、首先建立服务接口

备注:如果宿主不是网站,则接口上增加属性WebInvoke的时候启动会报错

  WebInvoke:声明支持RESTFul ,接口名称为GetSchoolList(http://localhost:81/ServicesSchool.School.svc/GetSchoolList)

  OperationContract:支持WCF默认

  

 1 namespace IServices 2 { 3 ?4 ????[ServiceContract] 5 ????public interface ISchool 6 ????{ 7 ????????/// <summary> 8 ????????/// http://localhost:81/ServicesSchool.School.svc/GetSchoolList 9 ????????/// </summary>10 ????????/// <returns></returns>11 ????????[WebInvoke(Method = "POST", UriTemplate = "GetSchoolList", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]12 ????????[OperationContract]13 ????????List<string> GetSchoolList();14 ????}15 }

2、服务接口实现

如果需要支持RESTFul 时增加属性[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

需要引用using System.ServiceModel.Activation

 1 namespace ServicesSchool 2 { 3 ????/// <summary> 4 ????/// ?5 ????/// </summary> 6 ????[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 7 ????public class School : ISchool 8 ????{ 9 ????????public List<string> GetSchoolList()10 ????????{11 ????????????return new List<string>() { 12 ????????????"红旗小学","大兴小学"13 ????????????};14 ????????????15 ????????}16 ????}17 }

3、建立asp.net 宿主项目

  配置文件部分

  此处只列出WCF的配置节点,MVC自带配置属性忽略

 ?<!--WCF ?配置--> ??<system.serviceModel> ???<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"> ?????<serviceActivations> ???????<add service="ServicesSchool.School" relativeAddress="ServicesSchool.School.svc" /> ?????</serviceActivations> ???</serviceHostingEnvironment> ???<services> ?????<service name="ServicesSchool.School" behaviorConfiguration="RESTBehaviour"> ???????<endpoint address="" ?????????????????binding="webHttpBinding" ?????????????????contract="IServices.ISchool" ?????????????????behaviorConfiguration="ESEndPointBehavior"/> ?????</service> ???</services> ???<behaviors> ?????<serviceBehaviors> ???????<!--设置rest接口属性--> ???????<behavior name="RESTBehaviour"> ?????????<serviceMetadata httpGetEnabled="true"/> ?????????<serviceDebug includeExceptionDetailInFaults="true"/> ???????</behavior> ???????<behavior> ?????????<!-- To avoid disclosing metadata information, set the values below to false before deployment --> ?????????<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> ?????????<!-- To receive exception details in faults for debugging purposes, set the value below to true. ?Set to false before deployment to avoid disclosing exception information --> ?????????<serviceDebug includeExceptionDetailInFaults="false"/> ???????</behavior> ?????</serviceBehaviors> ?????<endpointBehaviors> ???????<behavior name="ESEndPointBehavior"> ?????????<webHttp/> ???????</behavior> ?????</endpointBehaviors> ???</behaviors> ?</system.serviceModel> ?<!--WCF ?配置--> ?

配置节点分为三部分:

  1)、serviceHostingEnvironment 其实这就是启用了ASP.NET兼容模式,同时在节点serviceActivations中设置WCF服务的

    同时配置RESTFul访问时的服务实现和服务地址<add service="ServicesSchool.School" relativeAddress="ServicesSchool.School.svc" />

  2)、services 配置WCF服务

  3)、behaviors 配置属性

  备注:注意Services节点的RESTBehaviour和ESEndPointBehavior需要和behaviors 属性对应

4、配置WCF承载

  前面已经将WCF服务和配置文件介绍完成,后面就需要将WCF服务进行承载

  打开在Global.asax文件

  1)、在RegisterRoutes方法中增加new { controller = @"^\b(?!uap)\w*\b$" }来约束路由,放置WCF服务被封杀,

  

 1 public static void RegisterRoutes(RouteCollection routes) 2 ????????{ 3 ?4 ????????????//WebServiceHostFactory factory = new WebServiceHostFactory(); 5 ????????????//RouteTable.Routes.Add(new ServiceRoute("ServicesSchool", factory, 6 ????????????// ??typeof(ServicesSchool.School))); 7 ?8 ?9 ????????????routes.IgnoreRoute("{resource}.axd/{*pathInfo}");10 11 ????????????routes.MapRoute(12 ????????????????"Default", // 路由名称13 ????????????????"{controller}/{action}/{id}", // 带有参数的 URL14 ????????????????new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值15 ????????????????, new { controller = @"^\b(?!uap)\w*\b$" }16 ????????????);17 18 ????????}

  2)、在Application_Start中增加服务承载

      RouteTable.Routes.Add(new ServiceRoute("Uap", new WebServiceHostFactory(), typeof(ServicesSchool.School)));

  

 1 ????protected void Application_Start() 2 ????????{ 3 ????????????AreaRegistration.RegisterAllAreas(); 4 ?5 ????????????RegisterGlobalFilters(GlobalFilters.Filters); 6 ????????????RegisterRoutes(RouteTable.Routes); 7 ?8 ????????????RouteTable.Routes.Add(new ServiceRoute("Uap", new WebServiceHostFactory(), typeof(ServicesSchool.School))); 9 ???????????10 ????????}

 以上完成后,就可以进行测试

我们就可访问此URL:http://localhost:81/ServicesSchool.School.svc来判断我们Service提供的正确与否,若是看到下面的截图则表明Service无误

  看到上图,则说明服务正常,然后访问地址http://localhost:81/ServicesSchool.School.svc/GetSchoolList测试RESTFul接口

  

WCF宿主asp.netMVC 并且发布restfull接口数据

原文地址:https://www.cnblogs.com/happygx/p/9225794.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved