使用网站作为WCF服务宿主的几种做法

news/2024/5/20 12:31:30/文章来源:https://blog.csdn.net/weixin_34032827/article/details/85548196

内容摘要

这一篇文章探讨使用网站作为WCF服务宿主的几种做法,我将从最基本的svc文件的方式,演化成为无svc文件的方式,并且在最后介绍REST与路由规则结合的做法。

本文所讲解的WCF功能,是基于WCF 4.0这个版本。我所采用的开发工具是Visual Studio 2012. 本文范例代码可以通过 Web-host-sample.zip  下载。

本文不是WCF的入门文档,有关WCF的典型使用场景和一些基础知识,可以参考我之前的两篇文章

  • WCF技术的不同应用场景及其实现分析

  • WCF技术的不同应用场景及其实现分析(续)

 

范例说明

本文所采用的范例是相当简单的,我已经定义的合约和服务如下


using System.ServiceModel;namespace Web
{[ServiceContract]public interface IHelloService{[OperationContract]string SayHello();}public class HelloService : IHelloService{public string SayHello(){return "Hello,world";}}
}

 

基本做法(采用svc文件的方式)

WCF 4.0以前的版本,我们都是采用svc文件作为服务的宿主文件。例如,我们可以定义如下这样一个HelloService.svc,其内容如下

<%@ ServiceHost Service="Web.HelloService" %>

 

需要注意的是,你在Visual Studio中无法直接添加一个空白的svc文件,我一般是选择Text File这个模板,但是在命名的时候,将其修改为svc后缀。如下图所示

image

 

定义好这个文件后,可以直接在浏览器中查看该服务的描述,如下图所示。此时表示该服务已经被正确地宿主了。

image

 

 

无svc文件的做法

上面这个做法虽然不难,但每次都要手工创建那个svc文件,总是觉得有些多余。那么是否有办法免去这个步骤呢?WCF 4.0提供了这种可能性。

我们需要做的是,在配置文件中指定一个虚拟的文件路径,并且将其与服务进行关联起来。如下所示(请重点关心粗体部分)

<?xml version="1.0"?><!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  --><configuration><system.web><compilation debug="true"targetFramework="4.5" /><httpRuntime targetFramework="4.5" /></system.web><system.serviceModel><behaviors><serviceBehaviors><behavior><serviceMetadata httpGetEnabled="true"/></behavior></serviceBehaviors></behaviors>    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"multipleSiteBindingsEnabled="true"><serviceActivations><add service="Web.HelloService"relativeAddress="MyService.svc"/></serviceActivations></serviceHostingEnvironment></system.serviceModel>
</configuration>

为了与上面的例子区分,我特意在这里定义relativeAddress的时候,用了不一样的名称。你没有看错,只需要这样定义就可以直接访问到MyService.svc,而不要求你实际去创建这个文件。

image

看起来挺不错的,但仍然有一点点美中不足就是,这个虚拟地址,必须有一个后缀名(而且推荐使用svc),对于一般的用户而言,可能并不是特别友好。是否有办法将这个地址进一步地简化呢?

对于标准的SOAP服务来说,应该是没有办法了。但是如果是REST服务,倒是有另外一个方法来实现。请继续阅读下面的说明。

 

REST与路由规则

为了做演示,我将服务稍作修改,使得其成为所谓的RESTful的服务。请注意红色粗体部分。


using System.ServiceModel;
using System.ServiceModel.Web;namespace Web
{[ServiceContract]public interface IHelloService{[OperationContract]string SayHello();}public class HelloService : IHelloService{public string SayHello(){return "Hello,world";}}
}

 

然后我们还需要添加有关的配置文件设置(请注意粗体部分)

<?xml version="1.0"?><!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  --><configuration><system.web><compilation debug="true"targetFramework="4.5" /><httpRuntime targetFramework="4.5" /></system.web><system.serviceModel>    <services><service name="Web.HelloService"><endpoint contract="Web.IHelloService"binding="webHttpBinding"></endpoint></service></services><behaviors><serviceBehaviors><behavior><serviceMetadata httpGetEnabled="true"/></behavior></serviceBehaviors></behaviors><serviceHostingEnvironment aspNetCompatibilityEnabled="true"multipleSiteBindingsEnabled="true"><serviceActivations><add service="Web.HelloService"relativeAddress="MyService.svc"/></serviceActivations></serviceHostingEnvironment></system.serviceModel>
</configuration>

 

为了使用我们自己想要的地址(虚拟地址)来访问这个服务,我们可以结合路由规则来实现(这个也是WCF 4.0新增的特性)

image

将如下代码添加到Global.asax文件中

using System;
using System.ServiceModel.Activation;
using System.Web.Routing;namespace Web
{public class Global : System.Web.HttpApplication{private void RegisterRoutes(){WebServiceHostFactory factory = new WebServiceHostFactory();RouteTable.Routes.Add(new ServiceRoute("HelloService", factory,typeof(HelloService)));}protected void Application_Start(object sender, EventArgs e){RegisterRoutes();}protected void Session_Start(object sender, EventArgs e){}protected void Application_BeginRequest(object sender, EventArgs e){}protected void Application_AuthenticateRequest(object sender, EventArgs e){}protected void Application_Error(object sender, EventArgs e){}protected void Session_End(object sender, EventArgs e){}protected void Application_End(object sender, EventArgs e){}}
}

我们在这里是定义了一个路由规则,凡是请求HelloService这个虚拟路径的(注意,没有带任何后缀),就路由到我们的服务。在浏览器中我们可以看到效果如下

image

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_755025.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关注经典:CSS Awards 获奖网站作品赏析《第一季》

每天都有很多新的网站推出&#xff0c;其中不乏一些设计极其优秀的作品。这个系列的文章&#xff0c;我为大家挑选了2012年赢得 CSS Awards 大奖的50个最佳网站。这些鼓舞人心的网站作品代表了网页设计的最高水平&#xff0c;相信你可以得到很大的启发。 您可能感兴趣的相关文章…

移动端开发-各类免费收费api及网站工具收藏

为什么80%的码农都做不了架构师&#xff1f;>>> 一 、api 1、https://www.juhe.cn/ 跟百度api集市差不多&#xff0c;超级赞&#xff0c;做好认证就行了&#xff0c;我有20认证能用的免费api 2、http://apistore.baidu.com/astore/servicesearch?word%E5%85%8D%E…

网页设计与网站建设(CS3中文版)从新手到高手

为什么80%的码农都做不了架构师&#xff1f;>>> 网页设计与网站建设&#xff08;CS3中文版&#xff09;从新手到高手 本书是一本典型的案例实例教材&#xff0c;从网页制作和网站建设的应用实践出发&#xff0c;详细介绍如 何开发博客、餐饮、健康、企业门户、…

国内政府网站群云门户建设标准

我国政府网站已经走过了以技术为导向的发展阶段&#xff0c;现在正处于以内容为导向向以服务为导向过渡的关键时期。政府网站如何满足网站用户的实际需求&#xff0c;达到服务性政府的建设要求将是当今政府亟待解决的问题。美国政府推出“云优先”发展战略和云服务门户&#xf…

MVC与单元测试实践之健身网站(八)-统计分析

2019独角兽企业重金招聘Python工程师标准>>> ​统计分析模块与之前的内容相对独立&#xff0c;用于记录并跟踪各部位围度的变化。还需提供对所作计划的分析&#xff0c;辅助使计划更合理。 一 围度记录 这儿可以记录各项身体围度指标&#xff0c;现在包括体重在内身…

不能忍!花钱买的视频网站VIP账号别人在用,都是撞库惹的祸

你的牙刷被别人偷偷用了&#xff0c;是不是不能忍? 那你花钱买的视频网站VIP账号呢?有些人可能能忍&#xff0c;然而有些人却不能。 央视财经频道曝光了一则消息——你买的视频网站会员VIP 别人也在用&#xff0c;里面的当事人田女士不能忍&#xff0c;因为她的其他网银密码、…

优秀网站看前端 —— 小米Note介绍页面

刚开始经营博客的时候&#xff0c;我写过不少“扒皮”系列的文章&#xff0c;主要介绍一些知名站点上有趣的交互效果&#xff0c;然后试着实现它们。后来开始把注意力挪到一些新颖的前端技术上&#xff0c;“扒皮”系列便因此封笔多时。今天打算重开“扒皮”的坑&#xff0c;不…

作业4: 用户体验分析——以 “师路南通网站” 为例

一、作业目标 基于实例分析&#xff0c;体会用户体验设计的 7 条准则。二、作业要求 针对师路南通 &#xff0c;开展UX分析。PS&#xff1a;对比另外2个学习网站&#xff1a;1. UMU学习平台 &#xff1b;2. 学生安全教育平台基于7 条UX评价准则&#xff0c;分析“师路南通” 在…

Scala Playframework 访问HTTPS网站证书错误解决方案

2019独角兽企业重金招聘Python工程师标准>>> 使用Playframework访问https网站报如下错误&#xff1a; Cause: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to fi…

python模拟自动登录网站(urllib2)

不登录打开网页&#xff1a; import urllib2 request urllib2.Request(http://www.baidu.com) response urllib2.urlopen(request).read() print response 保存网页图片&#xff08;https://www.baidu.com/img/bd_logo1.png&#xff09;&#xff1a; picurl https://www.bai…

如何一步步构建大中型网站架构

&#xff08;转载自http://kb.cnblogs.com/page/99549/&#xff09; 之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型&#xff0c;我们可以从中获取很多有关…

5 个鲜为人知的黑科技网站,强大到不敢想象

点击上方“Java基基”&#xff0c;选择“设为星标”做积极的人&#xff0c;而不是积极废人&#xff01;源码精品专栏 原创 | Java 2019 超神之路&#xff0c;很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库…

大型网站架构系列:负载均衡详解(下)

大型网站架构系列&#xff1a;负载均衡详解&#xff08;下&#xff09;: " 《大型网站架构系列&#xff1a;负载均衡详解&#xff08;上&#xff09;》 一、软件负载均衡概述 硬件负载均衡性能优越&#xff0c;功能全面&#xff0c;但是价格昂贵&#xff0c;一般适合初期或…

团队-爬虫电影网站-最终程序

托管平台地址:https://gitee.com/w789369/PaChong/tree/master 小组名称:简单 小组成员合照:无 程序运行方法:python 程序运行示例及运行结果:转载于:https://www.cnblogs.com/lws1111/p/7944180.html

网站用户的注册与管理

django-registration安装与设置 执行命令 pip install django-registration此次frameword 会运用django原有的auth架构 在默认的情况下&#xff0c;django-registration只需要在setting.py中设置一个常数&#xff0c;用来指定启动码的天数&#xff0c; ACCOUNT_ACTIVATION_DAYS…

网站代码用什么打开_网站404页面有什么用?

在网站优化过程中&#xff0c;有很多知识点。今天我们要谈的是404页&#xff0c;404页在访问客户端的页面时&#xff0c;服务器出现无法正常显示的信息&#xff0c;或者服务器无法应对&#xff0c;客户输入错误的链接也出现404页但是&#xff0c;朋友们发现很多网站都制作了404…

项目案例:部署社交网站

前言&#xff1a;本次项目是搭建一套动态网站服务器平台&#xff0c;在上面运行社交网站&#xff08;例如&#xff1a;人人网&#xff0c;开心网&#xff0c;天涯论坛&#xff09;。相关知识点在前面的课程中都有所涉及&#xff0c;今天的实验就是一个综合运用&#xff0c;体现…

首次配置网站报错原因?

首次搭建自己的网站&#xff0c;在本地wamp服务上没有任何错误&#xff0c;但是同步到阿里云上就报错了&#xff0c;是什么原因呢&#xff1f; 原来&#xff0c;首次搭建网站要给予某些目录权限&#xff0c;否则权限无法运行&#xff0c;肯定报错的。我是把Application下的目录…

Spring cloud实战 从零开始一个简单搜索网站_Hystrix断路由的实现(三)

上文已经完成了一个简单的 浏览器 到 Client 到CSDN端的通路 我们的架构是每个博客网址为一个单独的组件&#xff0c; 这里为了方便直接先用CSDN 那个组件复制下 我这里改成 SDN 修改下 application.properties 端口记得改 eureka.client.serviceUrl.defaultZonehttp://loc…

直面春招!java相关技术网站

面试进大厂必问知识点内容 细节见真知:计算向数据移动、而非数据向计算移动 redis的5大Value类型解析 redis实现活跃用户/用户统计 redis实现秒杀/抢购 redis实现排行榜/评论列表 redis实现推荐系统/抽奖/商品详情页 linux系统的支持: fork、 copy on write redis的持久…