目前大家大多以IIS的托管方式承载WCF服务。对于小型应用这种形式确实提供了便利。但对于大中型应用控制台及Windows

服务形式托管WCF服务是不二的选择,因为往往在启动宿主进程时要进行大量的底层服务的初始化。

  控制台应用程序作为宿主时一样有跨域访问的问题。最典型的错误就是在开发环境或部署环境下报以下错误:

  Unhandled Error in Silverlight 2 Application 操作过程中出现异常,结果无效。有关异常的详细信息,请查看 InnerException。   位于 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
   位于 SLPADO.EDNASVC.GetUnitInfoCompletedEventArgs.get_Result()
   位于 SLPADO.Page.proxy_GetUnitInfoCompleted(Object sender, GetUnitInfoCompletedEventArgs e)
   位于 SLPADO.EDNASVC.EDNAWCFClient.OnGetUnitInfoCompleted(Object state)

  这是由于Silverlight代码在访问另一个域中(控制台应用)的WCF服务时出的错。我们知道当我们用IIS托管服务时要将clientaccesspolicy.xml这个

跨域访问策略文件放置到网站的根目录下,也就是通过连接http://xxxx/clientaccesspolicy.xml要能访问到这个文件。

  但此处的控制台应用需要将此文件以rest服务的形式发布出来。代码如下所示

  契约定义

}

 

 服务实现

}

 

  配置文件

 


       控制台程序托管WCF服务跨域访问问题解决..
      <endpointBehaviors>
        
<behavior name="CrossDomainServiceBehavior">
          
<webHttp/>
        
</behavior>
      
</endpointBehaviors>
      控制台程序托管WCF服务跨域访问问题解决控制台程序托管WCF服务跨域访问问题解决
    
</behaviors>
    
    控制台程序托管WCF服务跨域访问问题解决控制台程序托管WCF服务跨域访问问题解决

   
<service name="XCenter.Framework.Private.Impl.CrossDomainServiceImpl">
        
<host>
          
<baseAddresses>
            
<add baseAddress="http://localhost:8011/" />
          
</baseAddresses>
        
</host>
        
<endpoint address="" binding="webHttpBinding" contract=
                  
"XCenter.Framework.Public.Service.ICrossDomainService"
          behaviorConfiguration
="CrossDomainServiceBehavior"/>
      
</service>
    控制台程序托管WCF服务跨域访问问题解决控制台程序托管WCF服务跨域访问问题解决

 

   最后别忘了把你的clientaccesspolicy.xml放在网站根目录下一份

   参考:

    http://www.cnblogs.com/seeker/

   http://www.dotnetcurry.com/(X(1)S(4n021y452hfero55f2en1ciw))/ShowArticle.aspx?ID=208&AspxAutoDetectCookieSupport=1

 

 

相关文章: