如何从* .config文件以外的其他位置进行动态生成的.net服务客户端读取配置

时间:2010-05-12 18:15:00

标签: c# .net wcf proxy web-services

我目前编写的代码是使用ServiceContractGenerator生成基于wsdl的Web服务客户端代码,然后使用代码dom将其编译到内存中的程序集中。然后我使用反射来设置绑定,端点,服务值/类型,然后最终根据可在运行时更改的xml配置调用Web服务方法。

这一切目前工作正常。但是,我目前遇到的问题是,我遇到了几个需要大量自定义绑定/安全设置的异国情调的Web服务。这迫使我在我的自定义xml配置中添加越来越多的配置,以及我的代码的相应更新,以解释和设置代码中的绑定/安全设置。

最终,这使得添加这些“异国情调”服务变得更慢,我可以看到自己最终重新实现了web或app.config文件的'system.serviceModel'部分,这绝不是一件好事。

我的问题是,这是我缺乏经验.net和C#显示的地方,有没有办法定义通常在web.config或app.config'system.serviceModel'部分的其他地方找到的配置,以及在运行时将此配置提供给Web服务客户端?

有没有办法将app.config作为资源直接附加到程序集或以其他任何方式将此配置提供给客户端?

基本上,我想将包含'system.serviceModel'的app.config附加到包含Web服务客户端的程序集,以便它可以使用其配置。这样我就不需要处理太阳下的每一个配置,我可以让.net为我做。

Fyi,我不能选择为正在运行的应用程序的app.config中的每个服务配置。

非常感谢任何帮助。

提前致谢! 布赖恩

3 个答案:

答案 0 :(得分:2)

  • 创建派生自的自定义类 的ChannelFactory。
  • 覆盖受保护的 CreateDescription方法。在里面 覆盖,你需要......
  • 调用base.CreateDescription()。
  • 请阅读您的自定义配置。
  • 基于自定义ServiceEndpoint创建 在你的配置上。别忘了 绑定,行为等。
  • 返回自定义ServiceEndpoint。

更多详情HERE

答案 1 :(得分:1)

您的代理类是否来自ClientBase<T>?如果是,那么有一个接受BindingEndpointAddress的构造函数。您应该能够使用它们而不是相应的配置数据。

答案 2 :(得分:1)