仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 934|回复: 13
打印 上一主题 下一主题

[学习教程] ASP.NET教程之轻松完成WCF服务的机关函数依附注进仓酷云

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
c++是语言,其实C++和net网页编程的应用范围根本就不一样的。在net网页编程应用的领域内,c++是不合适的。所以微软才搞了C#和net网页编程对抗。明天在开辟博客园博客程序的WCF服务时,想在“WCF服务虚现”中经由过程机关函数举行依附注进。代码以下:
  1. 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服务的实例。示例代码以下:
  1. 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服务的实例。好比我们的注进:
  1. container.RegisterType<IBlogService,BlogService>();
复制代码
个中IBlogService是WCF服务接口,BlogService是WCF服务虚现。
2、完成IServiceBehavior接口-IocServiceBehavior
1.新建一个类IocServiceBehavior,承继自Attribute,完成IServiceBehavior
  1. publicclassIocServiceBehavior:Attribute,IServiceBehavior
复制代码
2.完成IServiceBehavior的AddBindingParameters()办法,并引进之前创立的IocInstanceProvider
  1. 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服务虚现类上增添[IocServiceBehavior]属性代码以下:
  1. [IocServiceBehavior]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在单位测试中完成机关函数依附注进)。
可怜的程序员,还是逃不出移植的命运!
分手快乐 该用户已被删除
沙发
发表于 2015-1-20 20:41:33 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
老尸 该用户已被删除
板凳
发表于 2015-1-25 22:33:02 | 只看该作者
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
若天明 该用户已被删除
地板
发表于 2015-2-4 06:26:43 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
山那边是海 该用户已被删除
5#
发表于 2015-2-5 00:09:37 | 只看该作者
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
若相依 该用户已被删除
6#
发表于 2015-2-5 10:09:46 | 只看该作者
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
因胸联盟 该用户已被删除
7#
发表于 2015-2-6 15:12:54 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
小魔女 该用户已被删除
8#
 楼主| 发表于 2015-2-14 12:51:33 | 只看该作者
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
admin 该用户已被删除
9#
发表于 2015-2-15 23:21:48 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
冷月葬花魂 该用户已被删除
10#
发表于 2015-3-4 17:52:20 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
再见西城 该用户已被删除
11#
发表于 2015-3-7 07:15:04 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
12#
发表于 2015-3-11 00:55:30 | 只看该作者
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
谁可相欹 该用户已被删除
13#
发表于 2015-3-17 17:10:44 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
精灵巫婆 该用户已被删除
14#
发表于 2015-3-24 13:21:02 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-7 07:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表