https站点调用wcf的问题解决

标签: wcf ssl https 跨域
232人阅读 评论(0) 收藏 举报
分类:

这个问题弄了我2天时间。各种纠结最后终于成功。特此记录下

开发环境:vs2010

客户端:silverlight使用自签名证书的https

服务端:wcf

我的需求是客户端地址必须为https方式,服务端不限。

最终成功解决的方式如下:

1.WCF配置为可接受http 和 https请求,代码未改动,配置文件如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </assemblies>
    </compilation>
    <httpRuntime executionTimeout ="120"/>
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BBB" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" receiveTimeout="01:00:00">
          <!--name=随意命名,但要与上面的bindingConfiguration="BBB"对应 -->
          <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
          <security mode="None">
</security>
        </binding>
      </basicHttpBinding>
	<webHttpBinding>
    <binding name="HttpsBinding">
      <security mode="Transport">
        <transport clientCredentialType="None"></transport>
      </security>
    </binding>
  </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <behavior name="A">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping> 
    <services>
      <!--注1:此处的behaviorConfiguration值要跟上面的name值对应-->
      <!--注2:此处的name值不能随便修改,命名格式为:完全命名空间+类名 -->
      <service behaviorConfiguration="A" name="KAM3000_A.WCF.KAMService">
        <!--注1:此处的contract值不能随便修改,命名格式为:完全命名空间+类名 -->
        <!--注2:此处的bindingConfiguration值要与下面 binding name中的name值对应-->
        <endpoint address="" bindingConfiguration="BBB" binding="basicHttpBinding" contract="KAM3000_A.WCF.IKAMService" />
	<endpoint address="" binding="webHttpBinding" bindingConfiguration="HttpsBinding" contract="KAM3000_A.WCF.IKAMService" />
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <directoryBrowse enabled="true" />
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
</configuration>

重点在要有两套endpoint,一个支持http 一个支持 https

两套 Httpbinding  对应一个支持http 一个支持 https

还有httpsGetEnabled="true"

最终在浏览器访问时都能成功访问到。但实际使用时我调用的还是http方式

2.将客户端绑定多一个https方式,证书使用自签名证书

此时客户端用https访问http的wcf时,出现“跨域错误”
3.在IIS根目录C:\inetpub\wwwroot下放入crossdomain.xm和clientaccesspolicy.xml文件,即可正常使用
附上这两个XML内容clientaccesspolicy.xml

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>
crossdomain.xml

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM>
<cross-domain-policy>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>


查看评论

https在云服务器请求的启用

本课程将详细介绍https,云服务器,SSL证书以及相关的购买,SSL证书在云服务器端的配置,到最后成功发送https请求
  • 2017年03月25日 14:35

WCF在https类型的网站中,web.config文件的配置方法。

关键是加粗的两行。                                           contract="IBOAutoApprovalWCF">...
  • dingxingmei
  • dingxingmei
  • 2013-10-30 18:03:32
  • 5561

在WCF WsHttp绑定上启用HTTPS的七个简单步骤

原文:点击打开链接 目录 介绍和目标步骤1:使用WCF项目创建一个简单的服务步骤2:在服务的web.config文件中启用传输级安全性步骤3:绑定绑定并指定HTTPS配置步骤4:启用W...
  • yenange
  • yenange
  • 2017-10-13 11:24:11
  • 737

无配置实现WCF访问

场景因有多个Windows服务需要附加WCF服务, 而网站在
  • yenange
  • yenange
  • 2014-06-10 23:42:42
  • 3771

wcf并发性,实例限流,负载均衡,故障转移

wcf    并发性 wcf服务缺省会保护并发性访问 并发性的模式 ConcurrencyMode枚举Singal(缺省)、Reentrant、Multiple 1、Single并发模式  ...
  • quboeric
  • quboeric
  • 2012-03-19 22:46:48
  • 5827

https站点调用wcf的问题解决

这个问题弄了我2天时间。各种纠结最后终于成功。特此记录下 开发环境:vs2010 客户端:silverlight使用自签名证书的https 服务端:wcf 我的需求是客户端地址必须为https方式,服...
  • wuyajungogo
  • wuyajungogo
  • 2017-12-08 14:22:12
  • 232

WCF实现http访问地址后面带参数访问方式

WCF实现HTPP URL带参数形式(http://xxxx.com?x=y&a=b)访问
  • zuoziqiang520
  • zuoziqiang520
  • 2016-06-19 17:37:34
  • 4039

【WCF】HTTP 无法注册 URL 进程,不具有此命名空间的访问权限

背景  如题,在运行WCF宿主主机时,出现了问题。  捕获异常为:HTTP 无法注册 URL http://+:8000/WCF/。进程不具有此命名空间的访问权限(有关详细信息,请参见 http://...
  • u013201439
  • u013201439
  • 2016-12-13 11:54:40
  • 3833

WCF 部署问题 小总结 (HTTP 不能注册的解决方法 和 部署Bat脚本)

WCF 部署问题 小总结 (HTTP 不能注册的解决方法 和 部署Bat脚本)2009-08-13 23:37 by G yc {Son of VB.NET}, 962 visits, 网摘, 收藏,...
  • ggw128
  • ggw128
  • 2010-09-09 08:50:00
  • 2863

WCF服务:HTTP 无法注册 URL http://+:8000 进程不具有此命名空间的访问权限

异常错误描述:HTTP 无法注册 URL http://+:8000/PACSGuardService/service/。进程不具有此命名空间的访问权限 问题原因:win7系统对WCF服务的权限控制...
  • dengqinglin2003
  • dengqinglin2003
  • 2016-11-14 18:44:43
  • 127
    个人资料
    等级:
    访问量: 2万+
    积分: 284
    排名: 27万+
    文章分类
    最新评论