博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF简单教程(5) 用IIS做Host
阅读量:5913 次
发布时间:2019-06-19

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

第五篇:用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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<
system.serviceModel
>
  
<!-- 这个节点是新加的,后面会讨论一下 -->
  
<
behaviors
>
    
<
serviceBehaviors
>
      
<
behavior 
name
=
"WebServer.DataServiceBehavior"
>
        
<
serviceMetadata 
httpGetEnabled
=
"true" 
/>
        
<
serviceDebug 
includeExceptionDetailInFaults
=
"false" 
/>
      
</
behavior
>
    
</
serviceBehaviors
>
  
</
behaviors
>
  
<
services
>
    
<!-- 新增了behaviorConfiguration属性,值就是上面定义过的behavior的name,表示此service使用指定的behavior配置 -->
    
<
service 
behaviorConfiguration
=
"WebServer.DataServiceBehavior" 
name
=
"WebServer.DataService"
>
      
<
endpoint 
address
=
"" 
binding
=
"wsHttpBinding" 
contract
=
"WebServer.IDataService" 
/>
      
<!-- 这个endpoint是新加的,后面会讨论一下 -->
      
<
endpoint 
address
=
"mex" 
binding
=
"mexHttpBinding" 
contract
=
"IMetadataExchange" 
/>
    
</
service
>
  
</
services
>
</
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,先到这吧,下一篇聊聊同步异步双向通讯方面的问题。

     本文转自 BoyTNT 51CTO博客,原文链接:
http://blog.51cto.com/boytnt/801384
,如需转载请自行联系原作者
你可能感兴趣的文章
Vim升华之树形目录插件NERDTree安装图解
查看>>
手动方式SQL注入脚本命令之精华版
查看>>
MVC3学习:利用mvc3+ajax实现登录
查看>>
看看国外的javascript题目,你能全部做对吗?
查看>>
遍历INI文件和删除指定域内容
查看>>
程序员技术练级攻略
查看>>
IIS7配置伪静态把后缀名映射为html方案
查看>>
JS随机生成不重复数据的代码分享
查看>>
poj1679
查看>>
JavaScript实时显示当前时间的例子
查看>>
开发的阅读文档来源灵感
查看>>
我也用github(2)——关联本地工程到github仓库
查看>>
Heritrix 3.1.0 源码解析(三十七)
查看>>
深入JS系列学习3
查看>>
Citrix 服务器虚拟化之八 Xenserver虚拟机模版
查看>>
Manacher模板,kmp,扩展kmp,最小表示法模板
查看>>
初步学习pg_control文件之二
查看>>
初步学习pg_control文件之八
查看>>
WordPress上传含有中文文件出现乱码
查看>>
记录 页面编码问题
查看>>