问题描述
VS2010+IIS7+Silverlight5.1.20513.0,刚接手一个前人交接的项目。里面有Sliverlight调用Webservice,在首页显示内容的一个功能。一直以来都是没有问题的,其中ServiceReferences.ClientConfig文件内容如下:<configuration><system.serviceModel><bindings><basicHttpBinding><bindingname="SilverLightServiceSoap"maxBufferSize="2147483647"maxReceivedMessageSize="2147483647"><securitymode="None"/></binding></basicHttpBinding></bindings><client><endpointaddress="http://localhost/SilverLightService.asmx"binding="basicHttpBinding"bindingConfiguration="SilverLightServiceSoap"contract="OnePageService.SilverLightServiceSoap"name="SilverLightServiceSoap"/></client></system.serviceModel></configuration>不存在跨域问题,因为是公司内部的网,没有clientaccesspolicy.xml和crossdomain.xml,发布在IIS上的是https,默认端口443,一切都能正常运行。就在上礼拜突然首页就报错了,错误如下(135.251.45.147是程序发布的服务器):网页错误详细信息用户代理:Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.1;Trident/5.0;SLCC2;.NETCLR2.0.50727;MediaCenterPC6.0;.NET4.0E;MS-RTCLM8;.NETCLR3.5.30729;.NETCLR3.0.30729;.NET4.0C)时间戳:Tue,16Dec201406:08:24UTC消息:UnhandledErrorinSilverlightApplication[Async_ExceptionOccurred]参数:调试资源字符串不可用。密钥和参数通常提供足够的信息用以诊断该问题。请访问http://go.microsoft.com/fwlink/?linkid=106663&Version=5.1.30514.00&File=System.dll&Key=Async_ExceptionOccurred位于System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()位于MapsHotspotDemo.OnePageService.GetUserViewRangeCompletedEventArgs.get_Result()位于MapsHotspotDemo.MainPage.slClient_GetUserViewRangeCompleted(Objectsender,GetUserViewRangeCompletedEventArgse)位于MapsHotspotDemo.OnePageService.SilverLightServiceSoapClient.OnGetUserViewRangeCompleted(Objectstate)行:1字符:1代码:0URI:https://135.251.45.147/DefaultBoss.aspx消息:UnhandledErrorinSilverlightApplication[Async_ExceptionOccurred]参数:调试资源字符串不可用。密钥和参数通常提供足够的信息用以诊断该问题。请访问http://go.microsoft.com/fwlink/?linkid=106663&Version=5.1.30514.00&File=System.dll&Key=Async_ExceptionOccurred位于System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()位于MapsHotspotDemo.OnePageService.InitOnePageSummaryCompletedEventArgs.get_Result()位于MapsHotspotDemo.MainPage.slClient_InitOnePageSummaryCompleted(Objectsender,InitOnePageSummaryCompletedEventArgse)位于MapsHotspotDemo.OnePageService.SilverLightServiceSoapClient.OnInitOnePageSummaryCompleted(Objectstate)行:1字符:1代码:0URI:https://135.251.45.147/DefaultBoss.aspx于是乎,开始查问题,上网看了很多朋友说的那些原因及解决方法,都不可行。唯一一种把ServiceReferences.ClientConfig文件改成以下内容,网页可以正常访问,但这是http,不是https:<configuration><system.serviceModel><bindings><basicHttpBinding><bindingname="SilverLightServiceSoap"maxBufferSize="2147483647"maxReceivedMessageSize="2147483647"><securitymode="None"/></binding></basicHttpBinding></bindings><client><endpointaddress="http://135.251.45.147/SilverLightService.asmx"binding="basicHttpBinding"bindingConfiguration="SilverLightServiceSoap"contract="OnePageService.SilverLightServiceSoap"name="SilverLightServiceSoap"/></client></system.serviceModel></configuration>于是我又试了改成下面的:<configuration><system.serviceModel><bindings><basicHttpBinding><bindingname="SilverLightServiceSoap"maxBufferSize="2147483647"maxReceivedMessageSize="2147483647"><securitymode="Transport"/></binding></basicHttpBinding></bindings><client><endpointaddress="https://135.251.45.147/SilverLightService.asmx"binding="basicHttpBinding"bindingConfiguration="SilverLightServiceSoap"contract="OnePageService.SilverLightServiceSoap"name="SilverLightServiceSoap"/></client></system.serviceModel></configuration>这样一来,服务器本机可以正常访问,但是其他机器去访问就还是报上面的错误。这个问题已经研究好久了,都没有解决。特此求助论坛里的各位经验丰富的大神了,谢谢了!
解决方案
解决方案二:
address="http://135.251.45.147:443/SilverLightService.asmx"加上端口访问测试下。
解决方案三:
1、重新发布wcf 2、更新sl对wcf的引用 3、重新编译sl项目 4、检查sl项目中的ServiceReferences.ClientConfig配置文件中的wcf地址 5、用地址是否可以访问wcf6、在IE的把http://135.251.45.147添加信任站点参考
解决方案四:
引用1楼kongwei521的回复:
address="http://135.251.45.147:443/SilverLightService.asmx"加上端口访问测试下。
你可能看错了,这里的443是https的默认端口,相当于80是http的默认端口一样
解决方案五:
问题已经解决了,分享下经验,正确配置文件如下:<configuration><system.serviceModel><bindings><basicHttpBinding><bindingname="SilverLightServiceSoap"maxBufferSize="2147483647"maxReceivedMessageSize="2147483647"><securitymode="Transport"/></binding></basicHttpBinding></bindings><client><endpointaddress="https://135.251.45.147/SilverLightService.asmx"binding="basicHttpBinding"bindingConfiguration="SilverLightServiceSoap"contract="OnePageService.SilverLightServiceSoap"name="SilverLightServiceSoap"/></client></system.serviceModel></configuration>前面提到本机可以访问,但是其他机器不能访问的原因,因为Silverlight编译后把所有相关文件都压缩到xap这个文件中,网上说直接更改里面的配置文件,不需要编译的。这个说法有时候成功有时候失败,恰巧我每次碰到都是失败的。所以最后我把整个项目重新编译,重新发布了一次,就可以成功访问了。