`
tubaluer
  • 浏览: 1446186 次
文章分类
社区版块
存档分类
最新评论
  • sblig: c / c++ 是不一样的都会输出 100
    j = j++

【WCF】自动加载 WCF Library

 
阅读更多
在论坛里遇到一个问题:如何做一个主程序,主程序里没有任何契约和配置文件能自动Host指定的外部的WCF Library Assembly。其实Visual Studio已经提供了类似的玩意,在你创建一个WCF Library工程之后在项目属性 -> WCF Options -> 会看到一个 "Start WCF Service Host When debugging anther project in same solution" 的选项,如果选上那么VS会自动调用 WcfSvcHost.exe 这个工具帮你托管 WCF 服务。而且VS一并提供的 WCF Test Client 给开发者十分方便的测试体验:



话说回来,通过对 Config 文件中的 serviceModel 配置节做解析完全可以自己实现,下面提供简单的实现方法:【示例代码下载】

(当然下面的方法还比较简陋,没有考虑什么安全配置、还有一些定义的Behavior等)
加载服务:

通过传入的 Assembly 可以找到对应的 xxx.dll.config 文件,然后解析其中的 “system.serviceModel" 配置节。为了之后的测试,返回一个 Dictionary,
因为客户端可以通过 ChannelFactory<T>.CreateChannel(Binding, EndpointAddress) 创建连接,所以顺便把需要的数据带回来。

加载客户端:
一切为了方便使用了 dynamic 类型,因为你在测试的时候一定是知道服务端的接口定义的。

运行示例:



其实我能想到上面的代码能用到地方就是自动化测试了... 另外考虑到安全的隔离每个WCF Library,应该考虑封装在 AppDomain 中。
感兴趣的童鞋,可以自己修改一下代码:使用 AppDomain.DoCallback() 封装上面的 LoadHost,需要注意的是 AppDomain 的独立性,
代理中不能有任何当前domain的数据上下文否则会抛异常。(可以使用 AppDomain.SetData / GetData 传送一些参数)


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics