开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

WCF简单教程(5) 用IIS做Host

简介:
+关注继续查看

第五篇:用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管理器中查看一下站点绑定,默认情况下能看到这样的设置:

140653853.jpg

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

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




     本文转自 BoyTNT 51CTO博客,原文链接:http://blog.51cto.com/boytnt/801384,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
0 0
WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
原文:[原创]WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿 在上面一篇文章中,我们对不同版本的IIS,以及ASP.NET得的实现机制进行了详细而深入的分析。在介绍IIS7.0的时候,我们谈到,HTTP.SYS+W3SVC实现了基于HTTP的请求监听,在此基础上引入了以下三组网络监听器(Listener)和监听适配器(Adapter),实现了基于TCP、Named Pipes和MSMQ的网络监听,图1揭示了IIS7的总体结构。
665 0
WCF 部署在IIS上
作者:jiankunking 出处:http://blog.csdn.net/jiankunking 一、 环境vs2010,WCF应用程序,server 2008 第一步:WCF项目右键点击项目,选择生成部署包,如下图: 第二步:WCF项目上右键,选择:在windows资源管理器中打开文件夹,如下图: 第三步:第二步:在你项目所在的文件目录下找到Package文件夹,这就是我们的部
1145 0
Silverlight中利用WCF获取客户端IP
public class Service1 : IService1 { public string DoWork() { OperationContext operationContext = OperationContext.
378 0
WCF self-host测试
如果要运行基本的WCF服务,需要基本的几个步骤: (1)为服务创建基地址 为服务基址创建Uri实例。包括Http方案,计算机,端口,服务路径 例如:Uri _baseAddress = new Uri("http://localhost:8990/FirstService/Service"); (2)服务创建宿主环境以承载服务 1 创建ServiceHost实例,指定服务契约和基址。
518 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载