WCF服务IIS7.5寄宿时遇到的问题
2013-02-21 15:12
465 查看
一、错误页面如下,出现这个问题,很大的可能是在iis中没有正确的配置WCF服务,解决的办法也很简单
使用 %Windows%\Microsoft.Net\Framework\v3.0\Windows Communication Foundation目录下的ServiceModelReg.exe程序就好了
首先检测服务状态:
命令: ServiceModelReg -vi
结果: 如果协议都是“未安装”状态 则可以确定是WCF在IIS中没有正确安装
接着安装服务:
命令: ServiceModelReg -i
结果: 如果成功安装,会返回成功信息
再试试服务,应该就可以正常使用了
二、今天在测试网站的时候,在浏览器中输入http://localhost/时,发生如下错误:
HTTP Error 500.21 - Internal Server Error
Handler "WebServiceHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list.
在网上找了一下原因,结果是
原因:在安装Framework v4.0之后,再启用IIS,导致Framework没有完全安装
解决:开始->所有程序->附件->鼠标右键点击“命令提示符”->以管理员身份运行->%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe –i
三、WCF Service重命名之后,在客户端就会出现服务类型找不到的错误。要分析解决这个问题,我们就要从svc、config和code文件之间的关系入手来分析。。。
新添加一个WCF Service项,命名为OrderService.svc,然后把svc的文件名改成其他的名字,比如OrderProcessorService.svc。编译通过之后,试图从客户端访问这个service的时候,就会报错说找不到这个服务类型,如下:
The type 'WcfSrvDemo4.OrderService', provided as the Service attribute value in the ServiceHost directive, or provided in the configuration element system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.
解决这个问题的方法很简单,但是原因我们要做详细说明。
首先,打开svc文件,你会发现只有一行像这样的内容:<%@ ServiceHost Language="C#" Debug="true" Service="WcfSrvDemo4.OrderService" CodeBehind="OrderProcessorService.svc.cs" %>。这里有两个重要参数,Service和CodeBehind。编辑状态下,CodeBehind一般不会出错,因为当你修改svc文件的时候,这里会自动更新;但是Service只有在利用重构的方法修改Service类名的的时候才会被更新到,利用其它方法修改类名,这里就会保留原值,所以这里往往是容易出错的地方。
其次,在运行时,宿主程序从svc文件中的Service属性得到WCF Service的完全限定名,然后从配置文件中找到同名的service,进而找到所有的EndPoint,并根据其属性进行实例化。如果svc文件中的Service属性和配置文件中的Service名字匹配,就无法找到EndPoint以及它的配置信息。
最后,配置文件中的Service名字必须是Service类名的完全限定名(即Namespace.classname),EndPoint的Contract必须是Service接口的完全限定名。否则,程序就无法从程序集中找到相应的类进行加载。
明白了svc、config和code文件之间的关系之后,就会很容易在错误出现的时候,很快锁定错误的范围进而解决问题。
注:本人遇到的第三个问题不是上面的问题,而是因为创建了虚拟目录的方式添加网站,当添加运用程序后可以正确访问元数据。
使用 %Windows%\Microsoft.Net\Framework\v3.0\Windows Communication Foundation目录下的ServiceModelReg.exe程序就好了
首先检测服务状态:
命令: ServiceModelReg -vi
结果: 如果协议都是“未安装”状态 则可以确定是WCF在IIS中没有正确安装
接着安装服务:
命令: ServiceModelReg -i
结果: 如果成功安装,会返回成功信息
再试试服务,应该就可以正常使用了
二、今天在测试网站的时候,在浏览器中输入http://localhost/时,发生如下错误:
HTTP Error 500.21 - Internal Server Error
Handler "WebServiceHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list.
在网上找了一下原因,结果是
原因:在安装Framework v4.0之后,再启用IIS,导致Framework没有完全安装
解决:开始->所有程序->附件->鼠标右键点击“命令提示符”->以管理员身份运行->%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe –i
三、WCF Service重命名之后,在客户端就会出现服务类型找不到的错误。要分析解决这个问题,我们就要从svc、config和code文件之间的关系入手来分析。。。
新添加一个WCF Service项,命名为OrderService.svc,然后把svc的文件名改成其他的名字,比如OrderProcessorService.svc。编译通过之后,试图从客户端访问这个service的时候,就会报错说找不到这个服务类型,如下:
The type 'WcfSrvDemo4.OrderService', provided as the Service attribute value in the ServiceHost directive, or provided in the configuration element system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.
解决这个问题的方法很简单,但是原因我们要做详细说明。
首先,打开svc文件,你会发现只有一行像这样的内容:<%@ ServiceHost Language="C#" Debug="true" Service="WcfSrvDemo4.OrderService" CodeBehind="OrderProcessorService.svc.cs" %>。这里有两个重要参数,Service和CodeBehind。编辑状态下,CodeBehind一般不会出错,因为当你修改svc文件的时候,这里会自动更新;但是Service只有在利用重构的方法修改Service类名的的时候才会被更新到,利用其它方法修改类名,这里就会保留原值,所以这里往往是容易出错的地方。
其次,在运行时,宿主程序从svc文件中的Service属性得到WCF Service的完全限定名,然后从配置文件中找到同名的service,进而找到所有的EndPoint,并根据其属性进行实例化。如果svc文件中的Service属性和配置文件中的Service名字匹配,就无法找到EndPoint以及它的配置信息。
最后,配置文件中的Service名字必须是Service类名的完全限定名(即Namespace.classname),EndPoint的Contract必须是Service接口的完全限定名。否则,程序就无法从程序集中找到相应的类进行加载。
明白了svc、config和code文件之间的关系之后,就会很容易在错误出现的时候,很快锁定错误的范围进而解决问题。
注:本人遇到的第三个问题不是上面的问题,而是因为创建了虚拟目录的方式添加网站,当添加运用程序后可以正确访问元数据。
相关文章推荐
- WCF寄宿与IIS里时遇到的问题
- 【问题总结】WCF寄宿与IIS里时遇到的问题
- WCF寄宿与IIS里时遇到的问题
- 微软白皮书发布:在IIS7.5中用Service Bus端点寄宿WCF服务
- 微软白皮书发布:在IIS7.5中用Service Bus端点寄宿WCF服务
- 微软白皮书发布:在IIS7.5中用Service Bus端点寄宿WCF服务
- IIS发布WCF服务时遇到的问题续
- 微软白皮书发布:在IIS7.5中用Service Bus端点寄宿WCF服务
- 【问题总结】WCF寄宿与IIS里时遇到的问题
- 微软白皮书发布:在IIS7.5中用Service Bus端点寄宿WCF服务
- WCF寄宿与IIS里时遇到的问题
- 使用Windows 7自带IIS(7.5)搭建FTP服务时遇到的一个奇怪问题
- 使用Windows 7自带IIS(7.5)搭建FTP服务时遇到的一个奇怪问题
- Orchestration通过向导发布为WCF服务寄宿在IIS中,出现账户权限问题的解决
- WCF服务在IIS发布时遇到的一些配置问题
- 发布WCF服务到IIS遇到的问题及解决方法
- WCF引用方式之IIS方式寄宿服务
- windows 2003 IIS 发布 WCF + Silverlight 发布过程可能会遇到几个问题的解决方法
- WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
- [转载]WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿