![clip_image002WCF BasicHttpBinding 安全解析(3)默认安全设置(IIS宿主)wcf宿主](/Files/20116/091a4620-6d18-4324-849b-eb9c488db1ff.gif)
图11-31 创建WCF如无应用程序
删除默认添加的SVC文件和接口文件,添加接口文件IHelloService.cs和接口实现文件HelloService.cs,代码内容和前面章节使用的相同。现在按代码清单11-78的方式配置web.config文件。
代码清单11-78 服务端web.config
现在我对代码清单11-78中的关键配置做简要的说明。清单中的
![clip_image004clip_image002WCF BasicHttpBinding 安全解析(3)默认安全设置(IIS宿主)wcf宿主](/Files/20116/430ca363-f009-4012-aeb7-aa7012e8c198.gif)
图11-32 配置服务站点
在浏览器内输入http://wcfservicewebsite.com/HelloService.svc来验证服务是否托管成功,结果如图11-33。
![clip_image006clip_image004clip_image002WCF BasicHttpBinding 安全解析(3)默认安全设置(IIS宿主)wcf宿主](/Files/20116/3cdc4cf9-bebf-499a-b69b-e9fd455189e5.gif)
图11-33 从浏览器访问HelloService.svc
图11-33的结果说明服务发布成功,接下来我们创建测试站点,使用vs2010创建一个Asp.net MVC2 Web应用程序,然后添加服务引用,输入服务地址,最后点确定,如图11-34。
![clip_image008clip_image006clip_image004clip_image002WCF BasicHttpBinding 安全解析(3)默认安全设置(IIS宿主)wcf宿主](/Files/20116/bb31aee3-b0a2-4bef-ac05-fb272711440e.gif)
图11-34 添加服务引用
添加引用之后,客户端会自动在配置文件中添加如代码清单11-79所示的配置。
代码清单11-79 客户端web.config配置
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
realm="" />
contract="HelloServiceReferenceForBasic.IHelloService" name="BasicHttpBinding_IHelloService" />
代码清单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 在前端显示请求的到的数据。
BasicHttpBinding返回数据:
<%: ViewData["Message"] %>
下面我们在vs2010中将测试站点设为启动项,开启Http监听工具Fiddler,启动测试站点。结果如图11-35所示。
![clip_image010clip_image008clip_image006clip_image004clip_image002WCF BasicHttpBinding 安全解析(3)默认安全设置(IIS宿主)wcf宿主](/Files/20116/7daa51ad-3807-4eb8-b60e-22e412b93d5a.gif)
图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
代码清单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
从代码清单11-82和代码清单11-83的数据可以看出默认情况下没有对消息进行加密,也没有任何凭据和认证信息。当然BasicHttpBinding不是一点安全性都没有的,下面的几节我们逐步的武装它。
最新评论