ASP.NET教程之轻松完成WCF服务的机关函数依附注进仓酷云
c++是语言,其实C++和net网页编程的应用范围根本就不一样的。在net网页编程应用的领域内,c++是不合适的。所以微软才搞了C#和net网页编程对抗。明天在开辟博客园博客程序的WCF服务时,想在“WCF服务虚现”中经由过程机关函数举行依附注进。代码以下:publicclassBlogService:IBlogService{privateIBlogSiteService_blogSiteService;publicBlogService(IBlogSiteServiceblogSiteService){_blogSiteService=blogSiteService;}}依附注进容器用的是Unity,IBlogSiteService的完成已在WCFHost运转时经由过程Bootstrapper举行注进,拜见孤单云云俊丽:离开Application_Start,让初始化代码更幽美。但是在客户端挪用这个WCF服务时,却呈现非常:
Theservicetypeprovidedcouldnotbeloadedasaservicebecauseitdoesnothaveadefault(parameter-less)constructor.
Tofixtheproblem,addadefaultconstructortothetype,orpassaninstanceofthetypetothehost.
呈现这个非常属一般征象,我没有告知WCFHost,它怎样晓得我要举行依附注进,我们之间又没故意灵感到。WCF按惯例做事,经由过程默许机关函数创立WCF服务的实例,以是激发非常。
那怎样办理这个成绩呢?
小软(微软)早就思索到这一点了,供应了IInstanceProvider与IServiceBehavior接口。我们只必要完成这两个接口,并让完成IServiceBehavior的类成为一个Attribute(承继自Attribute),然后加在WCF服务虚现类上,就能够完成WCF的机关函数依附注进。
详细完成步骤以下:
1、完成IInstanceProvider接口-IocInstanceProvider
1.新建一个类IocInstanceProvider,完成IInstanceProvider接口。
2.完成IInstanceProvider接口的三个办法,并引进你本人的IoC容器(好比我们用的是CNBlogs.Infrastructure.CrossCutting.IoC),也就是让WCF经由过程你的IoC容器猎取WCF服务的实例。示例代码以下:
publicclassIocInstanceProvider:IInstanceProvider{Type_serviceType;IContainer_container;publicIocInstanceProvider(TypeserviceType){_serviceType=serviceType;_container=CNBlogs.Infrastructure.CrossCutting.IoC.IoCFactory.Instance.CurrentContainter;}#regionIInstanceProviderMemberspublicobjectGetInstance(InstanceContextinstanceContext,Messagemessage){return_container.Resolve(_serviceType);}publicobjectGetInstance(InstanceContextinstanceContext){returnGetInstance(instanceContext,null);}publicvoidReleaseInstance(InstanceContextinstanceContext,objectinstance){if(instanceisIDisposable)((IDisposable)instance).Dispose();}#endregion}注:你的IoC容器要事前注进了响应的WCF服务的实例。好比我们的注进:container.RegisterType<IBlogService,BlogService>();个中IBlogService是WCF服务接口,BlogService是WCF服务虚现。
2、完成IServiceBehavior接口-IocServiceBehavior
1.新建一个类IocServiceBehavior,承继自Attribute,完成IServiceBehavior
publicclassIocServiceBehavior:Attribute,IServiceBehavior2.完成IServiceBehavior的AddBindingParameters()办法,并引进之前创立的IocInstanceProvider
publicclassIocServiceBehavior:Attribute,IServiceBehavior{#regionIServiceBehaviorMemberspublicvoidAddBindingParameters(ServiceDescriptionserviceDescription,ServiceHostBaseserviceHostBase,Collection<ServiceEndpoint>endpoints,BindingParameterCollectionbindingParameters){foreach(variteminserviceHostBase.ChannelDispatchers){vardispatcher=itemasChannelDispatcher;if(dispatcher!=null){dispatcher.Endpoints.ToList().ForEach(endpoint=>{endpoint.DispatchRuntime.InstanceProvider=newIocInstanceProvider(serviceDescription.ServiceType);});}}}publicvoidApplyDispatchBehavior(ServiceDescriptionserviceDescription,ServiceHostBaseserviceHostBase){}publicvoidValidate(ServiceDescriptionserviceDescription,ServiceHostBaseserviceHostBase){}#endregion}3、在WCF服务虚现类上增添属性代码以下:
publicclassBlogService:IBlogService{privateIBlogSiteService_blogSiteService;publicBlogService(IBlogSiteServiceblogSiteService){_blogSiteService=blogSiteService;}#regionIBlogServiceMemberspublicBlogSiteDtoGetBlogSiteWithPosts(intblogId,boolwithPostBody,intitemcount){return_blogSiteService.GetWithPosts(blogId,withPostBody,itemcount);}#endregion}弄定!是否是很轻松!
下面的完成代码参考自DomainOrientedN-Layered.NET4.0SampleApp(http://microsoftnlayerapp.codeplex.com/),假如你对DDD感乐趣,保举浏览这个项目标代码。
小结
你IoC了吗?假如没有,你真的Out了。不但ASP.NET能够轻松IoC(想爱简单,相处难:当ASP.NETMVC爱上IoC),并且单位测试也能够IoC(妄想成实际:用xUnit.net在单位测试中完成机关函数依附注进)。
可怜的程序员,还是逃不出移植的命运! asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源 由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。 ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。 通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。 ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。 使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。 ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。 ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
页:
[1]