从 .NET DLL 使用 webservice - app.config 问题
Posted
技术标签:
【中文标题】从 .NET DLL 使用 webservice - app.config 问题【英文标题】:Consume webservice from a .NET DLL - app.config problem 【发布时间】:2011-01-16 01:31:34 【问题描述】:我正在构建一个 DLL,我们称之为 mydll.dll,在其中我有时需要调用来自 web 服务的方法,myservice。 mydll.dll 是使用 C# 和 .NET 3.5 构建的。
为了使用 mydll 中的 myservice,我在 Visual Studio 2008 中添加了一项服务,这与使用 svcutil.exe 或多或少相同时间>。这样做会创建一个我可以创建的类,并将端点和绑定配置添加到 mydll app.config。
这里的问题是 mydll app.config 永远不会加载。相反,加载的是我在 mydll 中使用的程序的 app.config 或 web.config。
我希望 mydll 能够发展,这就是为什么我从一开始就将它的功能与系统的其他部分分离。在此演变过程中,它可能会添加更多它将调用的 Web 服务,从而排除手动复制粘贴方法来克服此问题。
我研究了几种可能的方法来解决这个问题:
-
手动将端点和绑定从 mydell app.config 复制到目标 EXE 或 web .config 文件。耦合模块,不灵活
在目标 .config 中包含来自 mydll app.config 的端点和绑定,使用 configSource(请参阅 here)。
还要增加模块之间的耦合
以编程方式加载 mydll app.config,读取端点和绑定,并实例化 Binding 和 EndpointAddress。
使用不同的工具为 myservice 创建本地前端
我不确定该走哪条路。选项 3 听起来很有希望,但事实证明这是大量工作,并且可能会引入几个错误,所以它值得怀疑。除了规范的 svcutil.exe 之外,我也不熟悉任何工具。
请给出上述替代方案的优缺点,提供实施其中任何一种方法的提示,或提出其他方法。
谢谢, 阿萨夫
【问题讨论】:
【参考方案1】:您可以在使用 DLL 的应用程序中将 svcutil 用作构建后事件。像这样:
svcutil.exe <service_address> /config:$(TargetPath).config /mergeConfig
这会将必要的配置合并到yourapp.exe.config
。如果在 DLL 中添加新的服务引用,则必须在此处添加另一行,因此它不是完全自动的,但仍然比手动复制配置简单一些。
【讨论】:
【参考方案2】:我也将我的open source web services framework 编译为单个 dll。尽管采用了完全不同的方法,但我为 JSON 和 XML 端点(以及 SOAP 端点的通用 WCF 配置)创建了通用 IHttpHandler,可以处理 每个 请求。所以我的配置是一个简单的单行所有我的网络服务映射端点到我的处理程序驻留在应用程序主机.config文件(即ASP.NET Web.config或控制台App.config ) 它应该在哪里。
【讨论】:
【参考方案3】:我更喜欢 选项 5 - “在代码配置中”,是的,是的,您失去了更改无需重新编译的好处,但这取决于您的需要。如果您知道自己永远不会更改端点或很少更改端点 - 只需在代码中进行配置,您将获得编译时间检查作为奖励 =) This 和 this 可以提供帮助。
顺便说一句,客户端配置中的配置是一种常见情况,如果您有很多这样的客户端,这可能会很痛苦,您应该考虑 3 或 5 =)
【讨论】:
我将手动复制配置并添加您稍后推荐的内容。谢谢!【参考方案4】:我应该从选项 1 或 2 开始(对我来说这个更好)。这些模块在 dll 中耦合,因此它们已经耦合。更改配置是微不足道的,但为读取构建一个基础架构会让您更加耦合。
3 和 4 选项的工作量更大。
【讨论】:
以上是关于从 .NET DLL 使用 webservice - app.config 问题的主要内容,如果未能解决你的问题,请参考以下文章