目前大家大多以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服务的形式发布出来。代码如下所示
契约定义
服务实现
配置文件
<endpointBehaviors>
<behavior name="CrossDomainServiceBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<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>
最后别忘了把你的clientaccesspolicy.xml放在网站根目录下一份
参考:
http://www.cnblogs.com/seeker/