微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight Web应用程序与 WCF服务 在 IIS6上 部署问题总结

主要涉及的环境是Windows Server 2003 R2/企业版,未安装Visual Studio 2010环境时的布署。

安装.net framework 4,Silverlight sdk 4,Silverlight tools等软件包后,如果你的WCF RIA应用还不能正常运行,则要检查以下问题

 

1. asp.net的版本要选择为4.0.30319

解决:在IIS6管理器中,选择Web应用的属性,asp.net标签页中,Asp.net版本选为4.0.30319,以为认的版本应该是2.0.50727.

现象:如果配置不对,出错为web.config配置项错误

 

2. xap的mine类型问题。

现象:如果配置不对,出错为Silverlight内容不出现,无论是aspx的测试页,还是html的测试页。

原因:xap在IIS6中要注册一个MIME类型,注册application/x-silverlight-app 或者 application/octet-stream 都可以下载

       MIME 类型如下:     

* .xap     application/x-silverlight-app

* .xaml    application/xaml+xml

* .xbap    application/x-ms-xbap

操作:在IIS6管理器中,在机器节点,就是网站节点的父节点,比如,你的主机名是MyServer,则节点名就是这个MyServer(local computer),点属性,选择mine 类型,进行注册

 

3. 允许ASP.NET 4.0.30319

现象:aspx的测试页无法运行,not found错误,但是html的测试页可以正常运行。

原因:如果刚刚安装的.net framework 4.0环境,IIS6认为禁止ASP.NET 4.0.30319的脚本运行。

解决:在IIS6管理器中,选择主机名节点的子节点中的 Web服务扩展(这个节点同“Web Site”同级,同级的有Application pools,Web Sites,Web Service Extension),观察ASP.NET 4.0.30319项前图标应该有绿地白色对钩,Status应该是Allowed。如果不对,右键选择Allow,设置完成。

 

4. svc 无法访问问题

现象:silverlight运行正常,但是调用WCF RIA Service部分出现异常,弹出错误提示。如登录或建立新用户时。

类似这样的silverlight异常框

 

Load operation Failed for query 'GetUser'. 远程服务器返回了错误: NotFound。

   位于 System.ServiceModel.domainservices.Client.OperationBase.Complete(Exception error)
   位于 System.ServiceModel.domainservices.Client.LoadOperation.Complete(Exception error)
   位于 System.ServiceModel.domainservices.Client.DomainContext.CompleteLoad(IAsyncResult asyncResult)
   位于 System.ServiceModel.domainservices.Client.DomainContext.<>c__displayClass1b.<Load>b__17(Object )

 

原因:svc服务没有建立

解决:将Web应用目录中,目录安全标签页中“认证和访问控制”弹出对话框中,仅选择“Enabled anonymous access ”使能匿名访问,而去掉集成认证。就是说仅有匿名访问。

**设置完成,最好将整个IIS 服务重新启动,这样不至于浪费时间。

 

5. 其他解决 

如果IIS6在.net framework 之后安装,可能需要将一些扩展名注册到IIS扩展中,可以使用下面第一个命令补救。完成后,在

IIS管理器中Web Site Properties,under Home Directory/Configuration,Could you check if extension .svc is mapped to aspnet_isapi.dll

run "c:/windows/Microsoft.NET/Framework/v4.0.30319/aspnet_regiis -i"

run "c:/windows/Microsoft.NET/Framework/v4.0.30319/ServiceModelReg.exe -i"

 

6. 尝试向 URI“http://localhost:8001/AccountService.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又 没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的 HTTP 标头。出现此错误也可能是由于使用的是 Web 服务代理中的内部类型而没有使用 InternalsVisibletoAttribute 属性。有关详细信息,请参阅内部异常。

 

解决方法

  一、在WCF项目根目录下添加clientaccesspolicy.xml文件

<? 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

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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐