WCF 跨域 Http绑定

跨域服务:

特性WebGet在System.ServiceModel.Web中

    [ServiceContract]
    public interface IDomainService
    {
        [OperationContract]
        [WebGet(UriTemplate = "ClientAccessPolicy.xml")]
        Message ProvidePolicyFile();
    }

    public class DomainService:IDomainService
    {
        #region IDomainService 成员

        public System.ServiceModel.Channels.Message ProvidePolicyFile()
        {

            /*
                这样第二次访问会产生文件独占的异常,应该应改为使用 MemoryStream 缓存读取,或者直接使用
                XmlReader reader = XmlReader.Create(@"ClientAccessPolicy.xml");
             */

             //FileStream filestream = File.Open(@"ClientAccessPolicy.xml", FileMode.Open,FileAccess.Read);
            //XmlReader reader = XmlReader.Create(filestream);   

            //ClientAccessPolicy.xml文件要放在exe文件同级
             XmlReader reader = XmlReader.Create(@"ClientAccessPolicy.xml");
            System.ServiceModel.Channels.Message result = Message.CreateMessage(MessageVersion.None, "", reader);

           return result;
        }

        //CrossDomainServiceBehavior

        #endregion
    }


 

普通WCF服务:

    [ServiceContract]
    public interface IWCFService
    {
        [OperationContract]
        int DoWork(int a, int b);

        [OperationContract]
        int DoWork2(int a, int b);
    }

    public class WCFService : IWCFService
    {
        public int DoWork(int a,int b)
        {
            return a + b;
        }

        public int DoWork2(int a, int b)
        {
            return a - b;
        }
    }


 

跨域策略文件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>

 

配置文件App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
      <services>
        <service behaviorConfiguration="WCFBase.WCFServiceBehavior" name="WCFBase.WCFService">
          <endpoint address="" binding="basicHttpBinding" contract="WCFBase.IWCFService">
            <identity>
              <dns value="localhost" />
            </identity>
          </endpoint>
          <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
          <host>
            <baseAddresses>
              <add baseAddress="http://localhost:9090/WCFService/" />
            </baseAddresses>
          </host>
        </service>
        <service name="WCFBase.DomainService">
          <endpoint address="" behaviorConfiguration="DomainServiceBehavior"
              binding="webHttpBinding" contract="WCFBase.IDomainService" />
          <host>
            <baseAddresses>
              <add baseAddress="http://localhost:9090/" />
            </baseAddresses>
          </host>
        </service>
      </services>
      
      <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
        <behaviors>
            <serviceBehaviors>
                <behavior name="WCFBase.WCFServiceBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
          <endpointBehaviors>
            <behavior name="DomainServiceBehavior">
              <webHttp/>
            </behavior>
          </endpointBehaviors>
        </behaviors>
      
      <!--
      <bindings>
        <basicHttpBinding>
          <binding name="NoneSecurity"
   maxBufferPoolSize="12000000" maxReceivedMessageSize="12000000" useDefaultWebProxy="false">
            <readerQuotas maxStringContentLength="12000000" maxArrayLength="12000000"/>
            <security mode="None"/>
          </binding>
        </basicHttpBinding>
      </bindings>
      -->
      
    </system.serviceModel>
 
</configuration>


 

启动方法

    class Program
    {
        static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(typeof(WCFService));
            host.Open();

            ServiceHost crossDomainserviceHost = new ServiceHost(typeof(DomainService));
            crossDomainserviceHost.Open();

            Console.WriteLine("Service Start...");
            Console.ReadKey();
            host.Close();
        }
    }



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值