WCF安全操练(3)--WCF客户端

      我的WCF客户端用的silverlight3实现,原因是silverlight3中加入了WCF服务安全性的支持。

      首先,在你客户端的开发机器上安装为WCF制做好的证书,可以直接把服务器上的证书导入到新机器中。导入的储存区最好是本地计算机的受信任的根证书颁发机构中,一劳永逸。

      新建silverlight项目,为silverlight工程添加服务引用,在生成的ServiceReferences.ClientConfig配置文件中会看到类似的结果,如果没生成,请手动写入,或是仔细检查发布完的WCF服务是否用的basicHttpBinding方式。

      接着让你的工程显示所有文件,打开被引用的WCF服务中的service.wsdl文件,看最后的几行文件,在<soap:address>结点中有你服务的地址,如https://dqgb-ldap001.dqgb.ldap2009.local/WcfServiceForMyself/ServiceForMyself.svc,由于我在内网中开发项目,这个地址是不会被正确解析的,所以要在整个解决方案中用IP地址替换掉dqgb-ldap001.dqgb.ldap2009.local。

      下面给出客户端的代码:

XAML文件:

XAML.CS文件:

       到这里客户端程序完成。接下来是注意事项。

       第一,就是前面提到的,WCF服务要用BasicHttpBinding。这是因为对 Silverlight 可以访问的服务类型存在一些限制。如果没有使用 “启用 Silverlight 的 WCF 服务”模板创建 WCF 服务,必须确保 WCF 服务配置为支持它的 BasicHttpBinding。

     第二,当在承载 Silverlight 应用程序的网站之外的任何位置创建服务时,都会产生跨域问题。在 Silverlight 应用程序和服务之间进行跨域调用时会出现安全漏洞,且必须由相应跨域策略明确启用该跨域调用。

     当在 Visual Studio 中调试多个单独的 Web 应用程序项目时,常常会出现这种情况,因为已向每个 Web 应用程序分配了不同的端口号。例如,您的 Silverlight 应用程序可能位于 http://localhost:1111 上,而您的服务可能位于http://localhost:2222 上。即使计算机名相同 (localhost),端口号的不同也足以造成跨域问题。

     第三,跨域问题的解决。在承载服务的域的根目录中放置一个 clientaccesspolicy.xml 文件,以配置服务允许跨域访问。 配置文件内客如下:

      这里要注意的是加入了<domain uri="http://*/">的配置,这是因为客户端是http的程序,而WCF是https的,若允许从某个 HTTP 应用程序访问 HTTPS 服务,则需要将 <domain uri="http://*/">元素放入<allow-from>元素。

      OK,到这里为止,WCF的安全操练全部完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值