WCF BasicHttpBinding 安全解析(3)默认安全设置(IIS宿主)
本节开始的实例采用IIS作为WCF宿主,使用的契约和实现和前面使用的仍然相同,下面我们构建两个站点,一个WCF服务宿主站点,一个服务测试站点。首先我们创建服务端,打开vs2010à文件à新建项目à选择WCF模板àWCF服务应用程序,如图11-31。
图11-31 创建WCF如无应用程序
删除默认添加的SVC文件和接口文件,添加接口文件IHelloService.cs和接口实现文件HelloService.cs,代码内容和前面章节使用的相同。现在按代码清单11-78的方式配置web.config文件。
代码清单11-78 服务端web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<serviceHostingEnvironment>
<serviceActivations >
<add relativeAddress="HelloService.svc"
service="WcfHelloService.HelloService"/>
</serviceActivations >
</serviceHostingEnvironment >
<services>
<service name="WcfHelloService.HelloService" behaviorConfiguration="WcfHelloService.ServiceBehavior">
<endpoint binding="basicHttpBinding" contract="WcfHelloService.IHelloService">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfHelloService.ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
现在我对代码清单11-78中的关键配置做简要的说明。清单中的<serviceActivations>配置节用于添加可定义虚拟服务激活设置(映射到WCF) 服务类型)的设置。使用此配置元素可以在不使用.svc文件的情况下激活承载在WAS/IIS中的服务。上面的配置中我们将WcfHelloService.HelloService服务的请求映射到虚拟的HelloService.svc。配置<serviceMetadata httpGetEnabled="true" />,使得我们可以通过httpGet的方式访问元数据。配置文件配置妥当之后我们打开IIS添加名为wcfservicewebsite.com的站点,目录指向项目所在的本地路径,应用程序池采用.net 4.0,如图11-32。
图11-32 配置服务站点
在浏览器内输入http://wcfservicewebsite.com/HelloService.svc来验证服务是否托管成功,结果如图11-33。
图11-33 从浏览器访问HelloService.svc
图11-33的结果说明服务发布成功,接下来我们创建测试站点,使用vs2010创建一个Asp.net MVC2 Web应用程序,然后添加服务引用,输入服务地址,最后点确定,如图11-34。
图11-34 添加服务引用
添加引用之后,客户端会自动在配置文件中添加如代码清单11-79所示的配置。
代码清单11-79 客户端web.config配置
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IHelloService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://wcfservicewebsite.com/HelloService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHelloService"
contract="HelloServiceReferenceForBasic.IHelloService" name="BasicHttpBinding_IHelloService" />
</client>
</system.serviceModel>
代码清单11-79的配置无需做过多的解释,但是由VS生成的配置文件中我们能看到更多的 默认细节,比如默认的编码方式、凭据类型、安全模式等。
修改HomeController为代码清单11-80所示的内容。
代码清单11-80 调用服务
[HandleError]
public class HomeController : Controller
{
HelloServiceReferenceForBasic.HelloServiceClient client = new HelloServiceReferenceForBasic.HelloServiceClient();
public ActionResult Index()
{
string helloString = client.GetHello();
ViewData["Message"] = helloString;
return View();
}
public ActionResult About()
{
return View();
}
}
在代码清单11-80中,首先声明了变量client,它是客户端代理实例。然后在Index方法中调用client.GetHello()方法,最后将返回的数据赋值给ViewData["Message"],返回的前端。在前端页面,我们通过如代码清单11-81的方式绑定数据。
代码清单11-81 在前端显示请求的到的数据。
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>BasicHttpBinding返回数据:<br />
<%: ViewData["Message"] %></h2>
</asp:Content>
下面我们在vs2010中将测试站点设为启动项,开启Http监听工具Fiddler,启动测试站点。结果如图11-35所示。
图11-35 客户端显示取得的数据
从图11-35的结果结合服务端的代码,服务端没有获取安全上下文才返回次结果。下面我们再看Fiddler监听到的数据,请求数据如代码清单11-82所示,响应数据如代码清单11-83所示。
代码清单11-82 客户端请求数据
POST http://wcfservicewebsite.com/HelloService.svc HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPo5jCIjrL22NAjy8DHniBadAAAAAAlMqRQj7B9ka4Fz7jm+jNSHCjeEjI+TVCsG2H2EAUzR8ACQAA
SOAPAction: "http://tempuri.org/IHelloService/GetHello"
Host: wcfservicewebsite.com
Content-Length: 133
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetHello xmlns="http://tempuri.org/"/></s:Body></s:Envelope>
代码清单11-83 服务端响应数据
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Sat, 25 Jun 2011 08:49:31 GMT
Content-Length: 197
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetHelloResponse xmlns="http://tempuri.org/">
<GetHelloResult>hello</GetHelloResult>
</GetHelloResponse>
</s:Body>
</s:Envelope>
从代码清单11-82和代码清单11-83的数据可以看出默认情况下没有对消息进行加密,也没有任何凭据和认证信息。当然BasicHttpBinding不是一点安全性都没有的,下面的几节我们逐步的武装它。
WCF BasicHttpBinding 安全解析(3)默认安全设置(IIS宿主)相关推荐
- WCF BasicHttpBinding 安全解析(4)windows验证(IIS宿主)
现在我们讨论TransportCredentialOnly安全模式下的安全配置,首先在配置文件中添加如代码清单11-84所示的配置节,配置windows验证.Windows凭据认证是基于Windows ...
- WCF BasicHttpBinding 安全解析(1)BasicHttpBinding基本配置
BasicHttpBinding使用HTTP作为传输协议用于发送SOAP 1.1消息.服务可以使用此绑定来公开符合WS-I BP 1.1标准的终结点,如ASMX客户端访问的终结点.同样,客户端可以使用 ...
- [WCF 4.0新特性] 默认终结点
很多WCF的初学者是从之前的Web服务上转移过来的,他们非常怀念.asmx Web服务无配置的服务寄宿方式.你只需要在定义Web服务的时候再表示服务操作的方法上应用WebMethodAttribute ...
- matlab 可变参数与默认参数设置
1. 基本思路 矩阵矢量化编程,而不是循环和遍历: GPU 并行计算: 使用稀疏矩阵: 2. 实践 可变长输入参数,输出参数,需要解析(使用大括号进行索引): varargin varargout 函 ...
- godaddy域名修改解析服务器,GoDaddy域名解析设置(详细图解教程) URL转发
一.Godaddy域名解析设置 1.登陆域名管理页面 首先打开Godaddy官网:,登陆自己的Godaddy账户,然后点击导航条里的Domain Manager,接着点击自己注册的域名,具体操作如下: ...
- 基于net.tcp的WCF配置实例解析
开通黄钻 基于net.tcp的WCF配置实例解析 本文主要通过文件配置来讲解如何编写一个基于net.tcp的Windows Form小程序. 使用的工具 涉及的工具有: SvcUtil.exe WCF ...
- MySQL命令及使用技巧以及当前时间字段默认值设置
MySQL数据库中需要建立时间字段并且设置其默认值为当前执行时间的方法是:建立字段类型为timestamp,并设置默认值为CURRENT_TIMESTAMP.即可,另外方法是设置字段为timestam ...
- 关于Jupyter Notebook默认起始目录设置无效的解决方法
关于Jupyter Notebook默认起始目录设置无效的解决方法 参考文章: (1)关于Jupyter Notebook默认起始目录设置无效的解决方法 (2)https://www.cnblogs. ...
- 成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败 ...
最新文章
- java 手风琴二级菜单_jQuery多级手风琴菜单实例讲解
- 机器学习、人工智能 博文链接汇总
- 《Python Cookbook 3rd》笔记(4.8):跳过可迭代对象的开始部分
- mysql存储过程参数与属性同名问题_存储过程中参数与表名相同的二义性问题
- python 如何运行程序
- Vue写项目后台SpringBoot 01
- 《Redis入门指南(第 2 版)》读后感
- kvaser CANking怎么使用?如何使用 Kvaser 虚拟通道 ?
- mysql mariadb libs_mysql 安装 【解决】mariadb-libs is obsoleted by *** - Ctrl+CCtrl+V - ITeye博客...
- 墓碑上的字符c语言程序设计,刻在死者墓碑上.概述人物事迹.赞美人物品格的文字叫墓志铭.信客离开我们后.村民为他树碑.请你为其撰写墓志铭. 题目和参考答案——青夏教育精英家教网——...
- Photoshop 渐变工具使用
- Texas Instruments
- 今年来,知识分享与内容付费趋势已经暗潮汹涌
- GDSII format
- 预测性编码(Predictive Coding)简介
- Linux下提示命令找不到:bash:command not found
- 给定一个整数,判断它能否被3,5,7整除
- iNavFlight之RC遥控CRSF协议
- Django基础(35): 全局上下文处理器(Context Processors)详解及如何自定义模板上下文处理器...
- 软件测试定义/过程/分类