关闭

https站点调用wcf的问题解决

标签: wcfsslhttps跨域
56人阅读 评论(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>


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

C#调用https需证书和用户身份验证的webservices

和工商对接数据,对方提供的webservices地址 带有https:, 并提供了证书、访问的用户名和密码。 用java调用,开发工具输入https直接访问不了,网站教的办法也不行, 最后改用C#...
  • li34442779
  • li34442779
  • 2016-09-22 14:31
  • 1871

Post方式调用wcf服务

我们平常在PC端调用WCF服务,只要知道WCF服务的地址,客户端直接添加引用服务就可以使用了,殊不知还有其他方式,其实,我们也可以 通过HTTP POST的方式调用WCF服务,这样就不用添加引用了,在...
  • zx13525079024
  • zx13525079024
  • 2014-05-26 12:03
  • 10435

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

关键是加粗的两行。                             ...
  • dingxingmei
  • dingxingmei
  • 2013-10-30 18:03
  • 5275

zencart 站点迁移(问题解决)

今天迁移zencart站点,出现一些问题,做下笔记. 说明: zencart从centos迁移到Windows,服务器差别是mysql不一样,centos是mysql5.5,Windows是mysql...
  • xkjscm
  • xkjscm
  • 2016-08-25 14:38
  • 586

VS2010 WCF 远程服务器返回了意外响应: (400) Bad Request等问题解决方案

1. wcf相关项目名称Service1.svc、IDataChangeTest.cs和DataChangeTest.cs(下面的专业名称可能不太准确)。 Service1.svc宿主,里面只关联接...
  • qyr20
  • qyr20
  • 2011-07-05 14:14
  • 8603

WCF+Restfull服务 提交或获取数据时数据大小限制问题解决方案

近日在使用wcf的restfull架构服务时遭遇到了提交大数据的问题。     大数据包含两种情形:     1)单条数据量过大。     2)提交或获取的数据条数过多。   ...
  • dyllove98
  • dyllove98
  • 2013-06-26 21:49
  • 4099

IFrame引用跨域站点页面时,Session失效问题解决

问题场景:在一个应用(集团门户)的某个page中, 通过IFrame的方式嵌入另一个应用(集团实时监管系统)的某个页面. 当两个应用的domain 不一样时, 在被嵌入的页面中Session失效。(s...
  • kntao
  • kntao
  • 2011-03-29 15:43
  • 2031

基于win10系统的arcgis server 10.2忘记主站点用户名密码,无法连接manager和ArcCatalog问题解决方案

1首先,查看主站点名; 运行 命令提示符(管理员),用安装中产生的PasswordReset.bat文件(我的路径为"D:\Program Files\"ArcGIS\Server\tools\pa...
  • qq_18278581
  • qq_18278581
  • 2017-07-05 10:16
  • 281

Nginx反向代理和多站点配置实现及问题解决

Nginx反向代理和多站点配置实现及问题解决
  • J7A4V5A2W2E8B9e4e6
  • J7A4V5A2W2E8B9e4e6
  • 2016-03-03 16:09
  • 3697

php多站点配置以及Forbidden You don't have permission to access / on this server问题解决

前几天在电脑上配置多站点的后突然出现了:”You don’t have permission to access / on this server!“ 究其原因是:swampserver默认访问的是w...
  • xiaozhegaa
  • xiaozhegaa
  • 2016-09-12 12:41
  • 5404
    个人资料
    • 访问:25320次
    • 积分:269
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:6篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论