第五篇:用IIS做Host

之前几篇的Demo中,我们一直在用控制台程序做Server,今天换IIS来做Host,在Web Application中添加WCF的服务。

其实在Web Application中添加WCF服务是最简单的,“新建项”中有专用的“WCF服务”,扩展名为svc。比如我们创建DataService.svc,Visual Studio会自己创建好DataService.svc、DataService.svc.cs、IDataService.cs共三个文件,并且自动在Web.config中增加默认设置。

从功能上看,IDataService.cs是服务契约,DataService.svc.cs是契约的实现类,DataService.svc没什么实际用处,里面也只有一行代码:

  1. <%@ ServiceHost Language="C#" Debug="true" Service="WebServer.DataService" CodeBehind="DataService.svc.cs" %>

Web.config中的部分与之前略有不同,我们来分析一下:

  1. <system.serviceModel>

  2. <!-- 这个节点是新加的,后面会讨论一下 -->

  3. <behaviors>

  4. <serviceBehaviors>

  5. <behaviorname="WebServer.DataServiceBehavior">

  6. <serviceMetadatahttpGetEnabled="true"/>

  7. <serviceDebugincludeExceptionDetailInFaults="false"/>

  8. </behavior>

  9. </serviceBehaviors>

  10. </behaviors>

  11. <services>

  12. <!-- 新增了behaviorConfiguration属性,值就是上面定义过的behavior的name,表示此service使用指定的behavior配置 -->

  13. <servicebehaviorConfiguration="WebServer.DataServiceBehavior"name="WebServer.DataService">

  14. <endpointaddress=""binding="wsHttpBinding"contract="WebServer.IDataService"/>

  15. <!-- 这个endpoint是新加的,后面会讨论一下 -->

  16. <endpointaddress="mex"binding="mexHttpBinding"contract="IMetadataExchange"/>

  17. </service>

  18. </services>

  19. </system.serviceModel>

与之前的App.config相比,有以下几点不同:

1、<host>节点没有了

host节点没有了,对应的baseAddress也没有了,这是理所当然的事,因为不需要,访问DataService.svc文件时的url本身就是一个地址了。

2、新增加了一个<behaviors>节点

此节点用于控制行为,在服务端只有<serviceBehaviors>子节点,下面的httpGetEnabled="true"表示允许用http的get方式获取服务的元数据信息。还记得第一篇中的例子吗?我们用浏览器访问时,得到一个“当前已禁用此服务的元数据发布”的提示,就是因为不允许以http的get方式获取服务元数据造成的,这个属性就是开启此功能。

顺便提一下,用svcutil.exe生成客户端代理的话,对http类型的binding,必须要开放get方式访问元数据。

3、新增加了一个endpoint

这个endpoint比较特殊,它的binding是mexHttpBinding,服务契约是IMetadataExchange。这个endpoint是用于元数据发布的,它的功能实际上和刚才的httpGetEnabled="true"有些重复。

我们可以这样理解,当开启了httpGetEnabled时,用 http://...../DataService.svc?wsdl 就可以访问到元数据;如果没开启,但有这个endpoint,用 http://...../DataService.svc/mex 也可以访问到元数据;如果都没有,那对不起,不允许你获取元数据。(当然啦,如果你已经有契约了,不会影响调用的)

多加一句,对tcp类型的binding,有一个对应的mexTcpBinding用于获取元数据,没有定义它,svcutil.exe就不能生成tcp类binding的代理类。

在IIS中发布WCF服务,一般很少用http之外的binding,但不代表不能用,IIS是支持的,我们在IIS管理器中查看一下站点绑定,默认情况下能看到这样的设置:

像netTcpBinding,就会利用IIS的net.tcp类型绑定,端口是808。

OK,先到这吧,下一篇聊聊同步异步双向通讯方面的问题。

本文出自 “兔子窝” 博客,请务必保留此出处http://boytnt.blog.51cto.com/966121/801384

转载于:https://blog.51cto.com/rmlifejun/1264402

WCF简单教程(5) 用IIS做Host相关推荐

  1. WCF简单教程(4) 数据契约

    第四篇:用数据契约传递自定义数据对象 之前的演示中,我们一直都是在用string类型做参数和返回值,实际项目中肯定会传递自定义的数据类型.与WebService不同,WCF想传递自定义数据,必须要将其 ...

  2. wcf简单教程(10) ajax调用,wcf简单教程(10) ajax调用

    wcf简单教程(10) ajax调用 [2021-02-11 16:23:59]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&q ...

  3. WCF简单教程(8) 安全 - Windows认证

    第八篇:WCF安全 WCF提供了非常丰富的加密机制与审核机制,以保证对外提供的服务安全可靠.本文是简单教程,所以只挑其中的一小部分来聊聊. 先来看看最简单的Windows认证. 所谓Windows认证 ...

  4. WCF简单教程(6) 单向与双向通讯

    第六篇:单向与双向通讯 项目开发中我们时常会遇到需要异步调用的问题,有时忽略服务端的返回值,有时希望服务端在需要的时候回调,今天就来看看在WCF中如何实现. 先看不需要服务端返回值的单向调用,老规矩, ...

  5. 【转】使用IIS做HTTP和WebSocket服务的反向代理

    反向代理对于服务器来说是非常实用的功能,可以将毫不相关的网站部署到同一个域名下,对于使用docker的人来说可以免去大量配置上的麻烦.它还能将HTTP流量转换成HTTPS,多个服务只需要一个证书就能解 ...

  6. 【转】x.509证书在WCF中的应用(Web/IIS篇)

    [转自]x.509证书在wcf中的应用( web/iis篇) 在上一篇"x.509证书在WCF中的应用(CS篇)"里,我们知道了如何在应用程序中,利用x.509证书来验证WCF的消 ...

  7. [老老实实学WCF] 第三篇 在IIS中寄存服务

    老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...

  8. thinkphp5 redis消息队列简单教程

    thinkphp5 redis消息队列简单教程 1.1 安装 thinkphp-queue composer install thinkphp-queue 1.2 搭建消息队列的存储环境 使用 Red ...

  9. Fikker 站长缓存无法缓存用 IIS 做 Web 服务器的 PHP 页面的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 在用户使用 Fikker 站长缓存和搭建CDN过程中发现用 IIS 做 Web 服务器的 PHP 页面不能缓存,主要原因是 H ...

最新文章

  1. java 复制一个数组_浅谈Java中复制数组的方式
  2. 联想拯救者开机自动修复_设计师群体的创作利器,联想拯救者Y9000X 2021图赏
  3. Redis Cluster 集群模式原理和动态扩容
  4. Linux-查看操作系统信息
  5. 无法加载可扩展计数器_多核可扩展计数器
  6. 招银网络笔试java_最新!!招银网络科技Java面经,整理附答案
  7. Usaco_1_3_Calf Flac
  8. 大数据可视化分析方法与流程
  9. appium+python 【Mac】Android夜神模拟器
  10. 《计算机组成与设计(硬件/软件接口)》读书笔记
  11. ShuZu冒泡排序选择排序
  12. 服务器每天自动变密码,Windows自动修改系统密码分享
  13. python有道字典_【Python】Python利用有道翻译开发API应用示例
  14. 说说Hibernate
  15. 增量式分级判别回归树(IHDR)|翻译与笔记
  16. 深度学习之图像分类(十六)-- EfficientNetV2 网络结构
  17. latex:公式的序号
  18. 爬虫selenium + chrome (PhantomJS)模拟浏览器 抓取京东商城为例
  19. 【深度学习】BERT变体—BERT-wwm
  20. 部署静态页面到腾讯云服务器

热门文章

  1. uva 10723——Cyborg Genes
  2. linux兴趣小组2017面试题浅析
  3. Mac快捷键和实用技巧
  4. 乘法口诀表的C语言编程
  5. C++ 常用算法之遍历
  6. Pthread创建线程后必须使用join或detach释放线程资源
  7. Intellij Idea搭建Spark开发环境
  8. java struts2 ajax_在struts2的Action中返回Ajax数据
  9. Linux第三周作业
  10. scrapy.Spider的属性和方法