我目前编写的代码是使用 ServiceContractGenerator 生成基于 wsdl 的 Web 服务客户端代码,然后使用代码 dom 将其编译成内存中的程序集。然后我使用反射来设置绑定(bind)、端点、服务值/类型,然后最终调用基于可在运行时更改的 xml 配置的 Web 服务方法。
目前一切正常。但是,我目前遇到的问题是,我遇到了几个需要大量自定义绑定(bind)/安全设置的奇异 Web 服务。这迫使我在我的自定义 xml 配置中添加越来越多的配置,以及对我的代码进行相应的更新,以在代码中解释和设置这些绑定(bind)/安全设置。
最终,这会使添加这些“奇特”服务的速度变慢,我可以预见自己最终会重新实现 web 或 app.config 文件的“system.serviceModel”部分,这绝不是一件好事。
我的问题是,这就是我缺乏 .net 和 C# 经验的地方,有没有一种方法可以定义通常在其他地方的 web.config 或 app.config“system.serviceModel”部分中找到的配置,以及在运行时将此提供给 Web 服务客户端的配置?
有没有办法将 app.config 作为资源直接附加到程序集或以任何其他方式向客户端提供此配置?
基本上,我想将仅包含“system.serviceModel”的 app.config 附加到包含 Web 服务客户端的程序集,以便它可以使用其配置。这样我就不需要在阳光下处理所有配置,我可以让 .net 为我做这件事。
仅供引用,我无法将每项服务的配置放入正在运行的应用程序的 app.config 中。
如有任何帮助,我们将不胜感激。
提前致谢! 布莱恩
最佳答案
- 创建一个派生自的自定义类 ChannelFactory。
- 覆盖 protected 创建描述方法。在里面 覆盖,你需要...
- 调用 base.CreateDescription()。
- 读入您的自定义配置。
- 创建一个基于自定义 ServiceEndpoint 在你的配置上。别忘了 绑定(bind)、行为等。
- 返回该自定义 ServiceEndpoint。
更多详情 HERE
关于c# - 如何使动态生成的 .net 服务客户端从 *.config 文件以外的其他位置读取配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2821565/