zoukankan      html  css  js  c++  java
  • wcf寄宿在iis上的跨域访问问题【不止是添加跨域文件】

    当客户端为silverlight或者其它不默认支持跨域的技术时,需要为wcf手动开启跨域,详细方法如下:

    首先跨域文件是必须的

    ClientAccessPolicy.xml

    1 <?xml version="1.0" encoding="utf-8"?>
    2  <access-policy>
    3 <cross-domain-access>
    4 <policy>
    5 <allow-from http-request-headers="*">
    6 <domain uri="*"/>
    7 </allow-from>
    8 <grant-to>
    9 <resource path="/" include-subpaths="true"/>
    10 </grant-to>
    11 </policy>
    12 </cross-domain-access>
    13 </access-policy>

    CrossDomain.xml

    1 <?xml version="1.0"?>
    2 <cross-domain-policy>
    3 <allow-access-from domain="*" />
    4 </cross-domain-policy>

    以上两个跨域文件需放在部署在iis上的根目录下。

    服务端config配置如下:

    1 <system.serviceModel>
    2 <behaviors>
    3 <serviceBehaviors>
    4 <behavior name="LoggerBehavior">
    5 <serviceDebug includeExceptionDetailInFaults="true" />
    6 <serviceMetadata httpGetEnabled="true" />
    7 </behavior>
    8 </serviceBehaviors>
    9 </behaviors>
    10 <extensions>
    11 </extensions>
    12 <bindings>
    13 <basicHttpBinding>
    14 <binding name="UnSecureConversationBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="1048576" maxBufferPoolSize="2097152" maxReceivedMessageSize="1048576" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
    15 <readerQuotas maxDepth="32" maxStringContentLength="16777216" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
    16 <security mode="None"></security>
    17 </binding>
    18 </basicHttpBinding>
    19 </bindings>
    20 <services>
    21 <service behaviorConfiguration="LoggerBehavior" name="eTank.OIU.Service.OIUService" >
    22 <endpoint binding="basicHttpBinding" bindingConfiguration="UnSecureConversationBinding" contract="eTank.OIU.Contract.IOIUUC" />
    23 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    24 </service>
    25 <service behaviorConfiguration="LoggerBehavior" name="eTank.OIU.Service.SMSConfigService" >
    26 <endpoint binding="basicHttpBinding" bindingConfiguration="UnSecureConversationBinding" contract="eTank.OIU.Contract.ISMSConfigUC" />
    27 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    28 </service>
    29 </services>
    30 </system.serviceModel>

    以上服务器配置需要注意的地方为:

    1.behavior中的<serviceMetadata httpGetEnabled="true" />是必须的;

    2.binding中的安全级别设为none,如:<security mode="None"></security>;

    3.每个服务添加一个元数据的终结点配置,如:<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>;


    完成以上配置以后silverlight等客户端即可以实现跨域访问wcf服务了。

  • 相关阅读:
    接收xml请求流并解析字符串的例子
    通过style来控制隔行显示不同颜色 .
    显示有模式的有页面的弹出窗口 .
    WSDL生成服务端JAVA代码.bat
    web上下文监听器ServletContextListener 例子 .
    使用监听器:定时清除map缓存的key value .
    Timer和TimerTask类 例子 .
    常用的正则表达式
    算法找出数组中出现次数超过一半的数
    C++讨厌的临时变量什么时候产生
  • 原文地址:https://www.cnblogs.com/larson/p/2029360.html
Copyright © 2011-2022 走看看