一:在本机直接运行时出错
使用WCF写了一个小程序测试一下它的功能在运行时报错。“添加服务失败。服务元数据可能无法访问。请确保服务正在运行并且正在公开元数据。”
如下图所示:
查了下资料把它解决了,记录一下。
解决方法:
将web.config中的
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
修改为
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
即可。
二:发布到IIS出错
2.1 IIS7 不支持svc的MIME类型
解决方案
开始->所有程序->附件->CMD->右键“用管理员方式”打开,进入以下目录C:WindowsMicrosoft.NETFrameworkv3.0Windows Communication Foundation,
,执行ServiceModelReg.exe -i 即可。
2.2 HTTP 错误 500.21 - Internal Server Error 处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
原因:
vs2010默认的是4.0框架,4.0的框架是独立的CLR,和2.0的不同,如果想运行4.0的网站,需要用aspnet_regiis注册4.0框架,然后用4.0的Class池,就可以运行4.0的web项目了.
如何用aspnet_regiis注册4.0框架 :
方法如下,启动cmd (win键+R 启动cmd) ,找到 4.0所在的目录,本人机器目录是 ;
注意:要以管理员的身份运行DOS窗口。
复制目录 C:WindowsMicrosoft.NETFrameworkv4.0.30319
运行 aspnet_regiis.exe -i
安装完成,这时的IIS就可以运行 .net 4.0 部署的网站了.
2.3
这是 Windows© Communication Foundation 服务。
当前已禁用此服务的元数据发布。
如果具有该服务的访问权限,则可以通过完成下列步骤来修改 Web 或应用程序配置文件以便启用元数据发布:
解决方法
web.config中的serviceBehaviors节点下的behavior 节点的name属性设为空字符串
1 <system.serviceModel> 2 <behaviors> 3 <serviceBehaviors> 4 <behavior name=""> 5 <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 --> 6 <serviceMetadata httpGetEnabled="true"/> 7 <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --> 8 <serviceDebug includeExceptionDetailInFaults="false"/> 9 </behavior> 10 </serviceBehaviors> 11 </behaviors> 12 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 13 </system.serviceModel>
2.4
“/”应用程序中的服务器错误。
未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.ServiceModel.Activation.HttpModule”。
解决方案:
在命令提示符CMD(管理员方式运行CMD)上打开地址 C:WindowsMicrosoft.NETFrameworkv4.0.30319 然后输入aspnet_regiis.exe -iru 后回车即可,参考下图
2.5
“/”应用程序中的服务器错误。
无法激活服务,因为它不支持 ASP.NET 兼容性。已为此应用程序启用了 ASP.NET 兼容性。请在 web.config 中关闭 ASP.NET 兼容性模式,或将 AspNetCompatibilityRequirements 特性添加到服务类型且同时将 RequirementsMode 设置为“Allowed”或“Required”。
解决方法:
将web.config中的
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
修改为
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
即可。
三:Service References 和 Web References、BasicHttpBinding和WsHttpBinding的不同点
Web References: 主要是添加Web Service引用,基于.NET Framework 2.0。
Service References:为了对.NET Framework 3.0 或 3.5版本上WCF Service Library的支持。
BasicHttpBinding:数据明文的通过xml发送
WsHttpBinding:数据被加密发送
假如,WCF的绑定方法是WSHttpBinding,那么,如果使用Web References来引用这个WCF服务中话,会不成功,只能用Service References方式引用才会成功;
假如,WCF的绑定方法是BasicHttpBinding,那么,无论使用Web References还是Service References都可以成功调用。