询问者
WCF如何加载外部工程契约和服务

问题
-
场景:
想做一个单纯控制台的WCF服务宿主,该工程里面没有任何契约定义和服务实现。由A工程(或其它多个工程)定义契约,B工程(或其它多个工程)分别实现A中定义的契约。这样以来,文件结构如下:一个exe控制台程序,多个dll契约文件和多个dll服务文件。
问题:
不能通过app.config的配置加载契约和服务。
尝试:
1. 当将契约和服务写入exe的app.config文件中时,启动宿主,无法通过Type.GetType(xxx)获取到契约或服务的定义,经查证,exe所在应用里面根本没有相关dll的定义,也未加载;
2. 将所有需被加载的dll在创建ServiceHost之前加载到应用exe的domain里面(采用FileStream.LoadFrom方式加载),Type.GetType(xxx)能够成功。
总结:
2的处理方式,感觉有点不灵活甚至有点傻傻的,或者不是我想要的处理过程,不知道各位是如何实现这样的使用场景的?在此请教。
QQ: 79965521 Email: WolfLai@126.com
全部回复
-
Hi,
我觉得你可以把你的解决方案分成:
1,一个工程定义为服务契约(主要是接口)。
2,另外一个工程为具体服务类的实现(即接口的实现类)。或者你也可以将接口与服务类放在一个工程下面。
3,再定义一个终结点(Endpoint)工程,主要是一些.svc文件,
你可以将WCF部署在IIS上(只须将Endpoint工程下的所有.svc文件部署在IIS下就可以),这样就可以不须要控制台宿主WCF服务了。
Please mark the replies as answers if they help or unmark if not. If you have any feedback about my replies, please contact msdnmg@microsoft.com Microsoft One Code Framework -
这个设计思路没错。
不过你不需要自己控制DLL的加载过程。
WCF服务的托管宿主程序在运行开始阶段会自动查找运行需要的DLL,首先应该是Bin目录吧。
也就是Exe运行的目录。
项目拆分多少,只是个程序集引用的问题。
不影响WCF服务的正常运行
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/
- 已标记为答案 Peter pi - MSFTModerator 2011年8月2日 1:08
- 取消答案标记 Wolf Lai 2011年8月2日 2:49
-
Hi, Frank, 不好意思,出差归来才来关注帖子。
是这样的,WCF宿主是根据App.config自动查找需要的DLL吧。我就是想通过改变App.config的配置来控制宿主能提供的服务。
问题在这里,我把所有服务契约和服务实现的DLL都放在bin目录了,然后在App.config中添加部分服务和契约。当宿主启动时,能读取到App.config中的配置,但是,在Type.GetType创建ServiceHost类型时,不能根据配置中的类型生成,老是NULL。断点查看时,发现是GetType中的类型没有在当前程序集中。正如我所说,LoadFile相关服务实现的DLL后就能顺利通过了。但这样一来,灵活性非常差。
谢谢。
QQ: 79965521 Email: WolfLai@126.com -
Hi, Frank, 不好意思,出差归来才来关注帖子。
是这样的,WCF宿主是根据App.config自动查找需要的DLL吧。我就是想通过改变App.config的配置来控制宿主能提供的服务。
问题在这里,我把所有服务契约和服务实现的DLL都放在bin目录了,然后在App.config中添加部分服务和契约。当宿主启动时,能读取到App.config中的配置,但是,在Type.GetType创建ServiceHost类型时,不能根据配置中的类型生成,老是NULL。断点查看时,发现是GetType中的类型没有在当前程序集中。正如我所说,LoadFile相关服务实现的DLL后就能顺利通过了。但这样一来,灵活性非常差。
谢谢。
QQ: 79965521 Email: WolfLai@126.com
动态控制程序集加载,应该可行,不过反射不是可能导致性能问题吗。你可以尝试尝试
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/