仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 961|回复: 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-2-14 12:51:33 | 显示全部楼层
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-6-18 03:45

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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