关于WCF的一个非常“无语”的BUG!
这确实是一个让人觉得“无语”的BUG,甚至让我觉得微软在故意和我们开玩笑。这个问题在我刚刚接触WCF的时候就遇到过,换言之,这个问题一直存在于.NET 3.0、3.5和现在的4.0。这是一个关于在你对WCF进行扩展的时候会经常碰到的问题,读者朋友们可以根据下面的步骤来再现这一个问题。 创建自定义行为(服务行为、终结点行为、契约行为和操作行为)是对WCF进行扩展最为常用的形式。通过下面的代码,我们创建了一个自定义的服务行为,为了简单我们没有编写任何逻辑代码。 1: namespace Artech.Bug4BehaviorExtension 3: public class FooBehavior : IServiceBehavior 5: void AddBindingParameters(ServiceDescription serviceDescription,ServiceHostBase serviceHostBase,Collection<ServiceEndpoint> endpoints,BindingParameterCollection bindingParameters) { }
7: void ApplyDispatchBehavior(ServiceDescription serviceDescription,ServiceHostBase serviceHostBase) { }
9: void Validate(ServiceDescription serviceDescription,1)" id="lnum10"> 10: }
通过如下的配置,上面定义的FooBehavior被应用到了CalculatorService服务上面。行为扩展的类型为:“Artech.Bug4BehaviorExtension.FooBehaviorElement,Artech.Bug4BehaviorExtension”(注意这是关键)。 2: <configuration>
8: serviceMetadata httpGetEnabled="true"/> > 现在再次刷新IE页面,你将会得到如下的结果。页面上的错误信息表明:我们定义的行为扩展类型无法被WCF解析——仅仅删除了一个小小的空格,WCF就不能正确地解析类型,这彻底让我无语。在本章的开篇我已经说过,这个问题我在很多年前就遇到过。因为我习惯于手工进行WCF的配置,在进行WCF扩展相关配置的时候,我经常发现我的服务访问不了,但是怎么也找不到问题的症结。然后通过VS提供的配置工具去配置,发现服务可以正常访问。然后两者进行对比,也没有发现有什么差异。其实在那种情况下,即使我发现多一个空格这种差异,我也不会觉得这种差别就是问题的症结所在。隐约记得有位读者在我的Blog上有过相关的留言,当时也没有在意,所以这个问题就一直没有深究。我想肯定会有人之前就发现过这个问题,肯定还会有后继者会遇到这个问题。为此,写下了这篇没有什么技术含量的博文,希望遇到相似问题但百思不得其解的人能够发现这篇文章。
作者:Artech
出处:http://artech.cnblogs.com 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 隐藏日期时间的ASP.NET MVC格式
- asp.net-mvc – Asp.net MVC控制器Action字符串参数未通过
- asp.net – 在转发器中只选择一个radiobutton
- asp.net-mvc – 将EF 4.1代码首先将ASP.NET MVC3部署到中等
- asp.net-core – 丰富Serlilogs,每个hangfire工作具有独特的
- asp.net – 为MVC3应用程序中的某些操作启用并要求SSL
- asp.net-mvc – App_Web _ * .dll中的System.NullReference
- asp.net – 如何让Html Link(锚点)回发像LinkBut??ton一样?
- asp.net-mvc-3 – ASP.NET MVC3 Razor:没有@if或@foreach可
- 在将所有websocket数据发送到客户端之前,ASP.NET关闭连接
- asp.net-mvc-3 – 如何根据Screen vs Handheld切
- Asp.net网站首先启动非常慢
- 从代码隐藏调用ASP.NET Web API
- asp.net – 如何从ajax调用web api Controller
- asp.net – 如何将两个模型传递给一个View
- .net – 如果选中复选框,如何制作文本框
- asp.net-mvc – MVC,FluentValidation和Ninject的
- asp.net-mvc – ASP.NET MVC自定义成员资格提供程
- asp.net – Quartz.net和Ninject:如何使用NInje
- entity-framework – 未找到可执行文件匹配命令“