您好,欢迎访问一九零五行业门户网

发布Silverlight+WCF程序到IIS后,客户端访问数据库失败的解决方

我们在编写silverlight程序时,大多情况下都需要借助wcf来访问我们的后端数据库,在开发过程中访问数据库都是正常的,但是当把整个silverlight项目连同wcf发布到iis上之后,会遇到这样一个问题:在host iis的服务器上能够正常访问数据库,但是当通过client端
我们在编写silverlight程序时,大多情况下都需要借助wcf来访问我们的后端数据库,在开发过程中访问数据库都是正常的,但是当把整个silverlight项目连同wcf发布到iis上之后,会遇到这样一个问题:在host iis的服务器上能够正常访问数据库,但是当通过client端执行程序时却无法访问数据库,也没有错误信息,调用页面都是正常的。
应该有很多人都遇到了这个问题,在网上也有很多关于这个问题的解决方法,但是绝大部分都是从跨域访问的角度来解决这个问题的,然后再尝试添加了clientaccesspolicy.xml和crossdomain.xml这两个配置文件,并且添加了iis中mime配置后,依然有很多人没有解决,我就是其中之一,花了一些时间研究了一下wcf的原理,最后重新对wcf进行了配置检查,更改了对wcf绑定和调用的方式,这才得以把问题彻底解决,下面和大家一起分享一下具体步骤。
检查你的servicereferences.clientconfig文件,这个文件是你在silverlight程序中添加服务引用时自动生成的,检查里面绑定wcf的方式是否为basichttpbinding,具体代码如下:

在你的web工程下找到web.config文件,同样检查里面的wcf配置信息,绑定方式是否为basichttpbinding方式,并且契约的名称是否填写正确,其具体代码如下:

最后,修改一下你调用webservice的代码:
basichttpbinding binding = new basichttpbinding(basichttpsecuritymode.none); binding.maxreceivedmessagesize = int.maxvalue; binding.maxbuffersize = int.maxvalue; gxptservicereference.gxpt_serviceclient client = new gxptservicereference.gxpt_serviceclient(binding, new endpointaddress( new uri(application.current.host.source, ../gxpt_service.svc))); client.getdataasync(); client.getdatacompleted += new eventhandler(client_getdatacompleted);
ok,可以再重新编译之后发布一下,别忘了加上必不可少的clientaccesspolicy.xml和crossdomain.xml这两个文件,否则你是无法通过ip访问到wcf的。
希望你看完之后,烦恼多日的问题能够迎刃而解。
其它类似信息

推荐信息