概述代码参考-->SilverlightWCF.Web SilverlightWCF 一.项目说明: 1.一个承载于网站的Silverlight解决方案 2.在网站工程里建立了一个Wcf,简单
调用数据库 3.在Silverlight工程里添加该Wcf的引用,并调用该Wcf显示数据 ======================================== 代码参考-->SilverlightWCF.Web SilverlightWCF 一.项目说明: 1.一个承载于网站的Silverlight解决方案 2.在网站工程里建立了一个Wcf,简单调用数据库 3.在Silverlight工程里添加该Wcf的引用,并调用该Wcf显示数据 ========================================================================================= 二.部署方法: 1.把网站工程生成一下 2.在网站工程上右键选择生成部署包(说明:包的位置可以在网站工程属性的打包/发布Web选项的创建包位置上看到) D:\VS2010Pro\SilverlightWCF.Web\obj\DeBUG\Package\PackageTmp 把这个目录在IIS上新建一个虚拟目录,然后选择这个虚拟目录,右键选择SilverlightWCFTestPage.HTML就可以浏览了 3.把Silverlight工程上的Wcf引用重新添加(注意:使用http://192.168.18.205:82/SilverlightWCF/wcfMain.svc 前往的方式,不是发现的方式,这个是部署到IIS上的虚拟目录的路径) 4.重新生成解决方案 5.在网站工程上右键选择重新生成部署包(主要是为了重新指向一下Wcf引用,让他指向IIS上的Wcf路径) 6.注意需要cmd命令行执行IISreset重启动IIS,防止没有应用最新的文件 ========================================================================================= 三.遇到的问题 1.单击按钮发现下拉框是有数据的,但是显示一片空白,检查xaml文件 <ComboBox.ItemTemplate> <DataTemplate> <StackPanel OrIEntation="Horizontal"> <TextBlock Text="{Binding Fname}" /> <TextBlock Text="," /> <TextBlock Text="{Binding FCaption}" /> </StackPanel> </DataTemplate> </ComboBox.ItemTemplate> 发现绑定没错 结果是Wcf定义的接口文件IwcfMain.cs ,Fname和FCaption 属性没有加[DataMember]导致客户端无法读取该属性 [DataContract] public class FIEldInfo { [DataMember] public string Fname { get; set; } [DataMember] public string FCaption { get; set; } } 2.解决尝试向 URI“http://localhost:19464/wcfMain.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的 http 标头。出现此错误也可能是由于使用的是 Web 服务代理中的内部类型而没有使用 InternalsVisibletoAttribute 属性。有关详细信息,请参阅内部异常。 解决方法: 一、在WCF项目根目录下添加clIEntaccesspolicy.xml文件 Code <?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> 二、在silverlight项目中添加一个中介类ServerManager.cs Code public class ServerManager { private static ServiceWcfClIEnt servicePicture = new ServiceWcfClIEnt(); internal static ServiceWcfClIEnt GetPox() { if (servicePicture.State == System.ServiceModel.CommunicationState.Created) { servicePicture.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://localhost:52207/ServiceWcf.svc"); return servicePicture; } else { return servicePicture; } } } 三、实例化实体类的时候一般是这样:ServiceWcfClIEnt clIEntWcf = new ServiceWcfClIEnt(); 换成:ServiceWcfClIEnt clIEntWcf = ServerManager.GetPox(); 3.如果第2步都已经处理正确了,还提示跨域 则有可能是IIS没有重新启动的原因,可以在代码中加入提示框进行跟踪,验证代码是不是最新的 4.如果出现远程服务器返回错误 not Found 很可能是代码写错了 例如Pigeon项目 //sConnectionStr = System.Configuration.ConfigurationManager. // ConnectionStrings["PigeonConnectionString"] // .ConnectionString; 取这个连接串有错误 后来改成手工连接串就好了 sConnectionStr = "Data Source=192.168.18.205;Database=Pigeon;UID=sa;Pwd=kicpassword"; 不够WCF返回的错误不好跟踪问题 5.遇到程序代码调试时可以正常读取web.config数据库连接串 System.Configuration.ConfigurationManager.ConnectionStrings["PigeonConnectionString"].ToString() 但部署到IIS上,却数据库连接失败,经过写日志跟踪发现读取的连接串为$(Replacabletoken_PigeonConnectionString-Web.config Connection String_0) 解决方法 需要修改项目文件,注意是项目文件(即:D:\VS2010Pro\Pigeon.Web\Pigeon.Web.csproj 在PropertyGroup里添加如下属性: <AutoparameterizationWebConfigConnectionStrings>False</AutoparameterizationWebConfigConnectionStrings> 这样就会正常生成自定义的连接串 以下是截取的片段 <?xml version="1.0" enCoding="utf-8"?> <Project Toolsversion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <AutoparameterizationWebConfigConnectionStrings>False</AutoparameterizationWebConfigConnectionStrings> <Configuration Condition=" '$(Configuration)' == '' ">DeBUG</Configuration> 总结
以上是内存溢出为你收集整理的VS2010Silverlight调用Wcf配置说明全部内容,希望文章能够帮你解决VS2010Silverlight调用Wcf配置说明所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)