zoukankan      html  css  js  c++  java
  • [转]Silverlight Web应用程序与 WCF服务 在 IIS6上 部署问题总结

    [转]Silverlight Web应用程序与 WCF服务 在 IIS6上 部署问题总结
    转自:http://blog.csdn.net/yinyaling/article/details/5919649

    主要涉及的环境是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 默认网站以及虚拟目录属性->目录安全性->身份验证和访问控制->勾选“启用匿名访问”,取消勾选“集成Windows身份验证” 。

    **设置完成,最好将整个IIS 服务重新启动,这样不至于浪费时间。
    cmd-->iisreset
    另一解决方法:
    1:安装IIS
    2:安装frmwork4.0
    3:安装Silverlight_4_Toolkit_April_2010.msi
    4:建创网站的虚拟目录
    5:从开发机拷备System.ServiceModel.DomainServices.Hosting和System.ServiceModel.DomainServices.Server到生产机的

    C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL这个目录
    6:拷备clientaccesspolicy.xml文件到wwwroot目录
    7:从开发机拷备拷备System.ServiceModel.DomainServices.Hosting.OData和System.ServiceModel.DomainServices.EntityFramework到生产

    机 C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL这个目录
    8:配置IIS
       (1):wev服务扩展->允许asp.netv4.0
       (2):网站属性->文档->添加默认文档(如:Investoday.Yankee.ThirdPartyTestPage.aspx)
       (3):网站属性->目录安全性->把身份验证只设置成启用匿名方部,去掉集成windows身份验证
       (4):网站属性->Asp.net->选择Version版本为4.0
       (5):网站属性->Http头->点击MIME类型->添加.xaml:application/xaml+xml和.xap:application/x-silverlight-app的映射
       (6):重启IIS->运行命令:iisreset
    经过上述步聚,部署就可以成功(操作系统:windows 2003 sp2)
    有为:448114915如果不明白,可以加我QQ问

    另一解决方法:
    Xun Sun , MSFT(Microsoft Full Time employee 指微软正式员工)
    2003 + IIS6默认wcf是没有被enabled.
    试试这两个命令:
    run "c:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -i"
    run "c:\windows\Microsoft.NET\Framework\v4.0.30319\ServiceModelReg.exe -i"
    Go to IIS Manager, in the Web Site Properties, under Home Directory/Configuration, could you check if extension .svc is mapped to

    aspnet_isapi.dll?


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

  • 相关阅读:
    leetcode-38.报数
    leetcode-35.搜索插入位置
    leetcode-27.移除元素
    leetcode-26.删除重复数组中的重复项
    leetcode-20.有效的括号
    leetcode-973最接近原点的K个点
    leetcode-14最长公共前缀
    leetcode-13罗马字符转整数
    MFC俄罗斯方块
    leetcode-9.回文数(水仙花数)
  • 原文地址:https://www.cnblogs.com/furenjun/p/2168952.html
Copyright © 2011-2022 走看看