博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF宿主asp.netMVC 并且发布restfull接口数据
阅读量:5451 次
发布时间:2019-06-15

本文共 3735 字,大约阅读时间需要 12 分钟。

项目中需要同时用到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         ///  8         /// http://localhost:81/ServicesSchool.School.svc/GetSchoolList 9         /// 10         /// 
11 [WebInvoke(Method = "POST", UriTemplate = "GetSchoolList", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]12 [OperationContract]13 List
GetSchoolList();14 }15 }

2、服务接口实现

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

需要引用using System.ServiceModel.Activation

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

3、建立asp.net 宿主项目

  配置文件部分

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

配置节点分为三部分:

  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接口

  

 

转载于:https://www.cnblogs.com/happygx/p/9225794.html

你可能感兴趣的文章
学习中的小笔记
查看>>
test
查看>>
LVS 负载均衡 keepalive
查看>>
The eleven Day
查看>>
HTTP 无法注册URL 进程不具有命名空间的访问权限
查看>>
spring 基于multipart 文件上传
查看>>
循环冗余校验(CRC)算法入门引导
查看>>
Swift继承的用法
查看>>
【[六省联考2017]组合数问题】
查看>>
数据结构与算法学习 第1季02 链表的基本功能 C++实现
查看>>
Oracle Listener
查看>>
java String spilt 问题
查看>>
【P3056】【USACO12NOV】笨牛Clumsy Cows
查看>>
准标识符(Quasi-dientifier, QI)
查看>>
深入理解VMware虚拟机网络通信原理
查看>>
Linux命令——find/grep
查看>>
TJU1016
查看>>
HttpClientUitl工具类
查看>>
Could not find or load main class
查看>>
VC 预定义宏
查看>>