WCF服务以控制台程序为宿主时Silverlight的跨域访问问题.doc_第1页
WCF服务以控制台程序为宿主时Silverlight的跨域访问问题.doc_第2页
WCF服务以控制台程序为宿主时Silverlight的跨域访问问题.doc_第3页
WCF服务以控制台程序为宿主时Silverlight的跨域访问问题.doc_第4页
WCF服务以控制台程序为宿主时Silverlight的跨域访问问题.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

WCF服务以控制台程序为宿主时的跨域访问问题 前几天研究SilverLight时碰到了这个问题,本以为很轻松的试验结果很不顺利,查了很多资料才解决了这个问题,在此把解决问题的方法写出来,也方便其它朋友借鉴。 问题是这样产生了,我在测试SilverLight时为了测试与WCF的通讯,创建了一个控制台的应用程序做为WCF服务的宿主程序。 同时创建了一个SilverLight应用程序和一个承载SilverLight的Web程序. 解决方案如图: 控制台程序: 1.添加 WCF服务 命名为WCFService.cs,并添加服务,代码如下:namespace WCFBase / 注意: 如果更改此处的类名 WCFService,也必须更新 App.config 中对 WCFService 的引用。 public class WCFService : IWCFService public int DoWork(int a,int b) return a + b; public int DoWork2(int a, int b) return a - b; 系统会自动添加App.config文件和相关配置节信息内容如下: 2.加载WCF服务打开主程序入口Main方法,代码如下namespace WCFBase class Program static void Main(string args) ServiceHost host = new ServiceHost(typeof(WCFService); host.Open(); Console.WriteLine(Iam Here.); Console.ReadKey(); host.Close(); 至此运行该控制台程序,WCF服务启可使用。但当垮域访问时会运行错误,提示没有仅限操作。这时需要如下操作3.使WCF可以垮域访问 A.在控制台程序根目添加clientaccesspolicy.xml文件 内容如下: B.添加接口 IDomainService (名称可自定义)首先要添加System.ServiceModel.Web 引用代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Xml;using System.ServiceModel;using System.ServiceModel.Channels;namespace WCFBase /*/ / / 跨域访问策略服务接口 / 注意:如果你更新了ICrossDomainService接口,需要同时更新App.Config / ServiceContract public interface IDomainService OperationContract WebGet(UriTemplate = ClientAccessPolicy.xml) Message ProvidePolicyFile(); C.实现接口IDomainService类:DomainService(可自定义)代码如下: namespace WCFBase public class DomainService:IDomainService #region IDomainService 成员 public System.ServiceModel.Channels.Message ProvidePolicyFile() FileStream filestream = File.Open(ClientAccessPolicy.xml, FileMode.Open); / Either specify ClientAcessPolicy.xml file path properly / or put that in /Bin folder of the console application XmlReader reader = XmlReader.Create(filestream); System.ServiceModel.Channels.Message result = Message.CreateMessage(MessageVersion.None, , reader); return result; /CrossDomainServiceBehavior #endregion D.修改App.config文件修改后为 灰色区域为新添加的信息,还没有完成,继续.E.修改控制台打开主程序入口Main方法代码如下:namespace WCFBase 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(Iam Here.); Console.ReadKey(); host.Close(); 灰色区域为新添加代码最终程序结构如下:到此WCF服务即可实现垮域访问.注意:需要将clientaccesspolicy.xml文件复制到 WCFBase.exe相同目录下。4.SilverLight与WCF通讯测试运行控制台程序 WCFBase.exe如图: 在SilverLight程序中添加服务引用,地址为http:/localhost:9090/WCFService/ SilverLight代码如下private void btnTest_Click(object sender, RoutedEventArgs e) ServiceReference1.WCFServiceClient wcf = new SilverlightApp.ServiceReference1.WCFServiceClient(); wcf.DoWorkCompleted += new EventHandler(wcf_DoWorkCompleted); wcf.DoWorkAsync(1, 2); void wcf_DoWorkCompleted(object sender, SilverlightApp.ServiceReference1.DoWorkComplet

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论