Silverlight Web应用程序与 WCF服务 在 IIS6上 部署问题总结
2010-10-03 13:00
531 查看
主要涉及的环境是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();
安装.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();
相关文章推荐
- Silverlight Web应用程序与 WCF服务 在 IIS6上 部署问题总结
- [转]Silverlight Web应用程序与 WCF服务 在 IIS6上 部署问题总结
- Silverlight 应用 WCF RIA Services 在 IIS6 部署问题总结
- 【转载】Silverlight 应用 WCF RIA Services 在 IIS6 部署问题总结
- Silverlight 应用 WCF RIA Services 在 IIS6 部署问题总结
- Silverlight 应用 WCF RIA Services 在 IIS6 部署问题总结
- Silverlight部署中WCF文件在IIS中不能浏览问题
- Silverlight+WCF 简单部署问题集
- 解决 Silverlight 调用 WCF 服务 跨域访问 和 Silverlight 引用服务后配置文件不加载的问题
- Silverlight+WCF 简单部署问题集
- WCF 部署问题 小总结 (HTTP 不能注册的解决方法 和 部署Bat脚本)[转]
- WCF RIA Services 在 IIS6 部署问题
- 总结最近两天另人抓狂的WCF跨服务访问问题
- 关于silverlight和Wcf分布式部署注意问题(收藏夹)
- WCF 部署问题 小总结 (HTTP 不能注册的解决方法 和 部署Bat脚本)
- WCF部署于IIS使用的几个问题总结
- WCF 部署问题 小总结 (HTTP 不能注册的解决方法)
- Silverlight RIA Service部署到IIS6的步骤或问题。
- Silverlight应用程序中添加WCF服务的兼容性问题
- Silverlight+WCF 简单部署问题集