使用 .NET DLL 调用 Web 服务 - app.config 问题

10
我正在构建一个DLL,让我们称其为mydll.dll,有时需要从webservice中调用方法,myservicemydll.dll使用C#和.NET 3.5构建。
为了从mydll中使用myservice,我已经在Visual Studio 2008中添加了一个服务(类似于使用svcutil.exe)。这样做会创建一个可以创建的类,并将端点和绑定配置添加到mydll app.config中。
问题在于mydll app.config从未被加载。相反,加载的是我在其中使用mydll的程序的app.config或web.config。
我希望mydll能够发展壮大,这就是为什么一开始就将其功能与我的系统其他部分解耦的原因。在这个过程中,它可能会添加更多的WebService以进行调用,排除手动复制粘贴的方式来解决这个问题。
我已经考虑了几种可能的方法来解决这个问题:
  1. 手动从mydell app.config复制端点和绑定到目标EXE或Web.config文件中。
    耦合模块,不灵活
  2. 在目标.config中包含mydll app.config中的端点和绑定,使用configSource(参见这里)。
    也会增加模块之间的耦合
  3. 编程方式加载mydll app.config,读取端点和绑定,并实例化Binding和EndpointAddress。
  4. 使用不同的工具为myservice创建本地前端

我不确定该走哪条路。第三个选项听起来很有前途,但事实证明这是一项很大的工作,并且可能会引入几个漏洞,所以它不太值得。除了传统的svcutil.exe之外,我也不熟悉任何其他工具。

请为上述替代方案提供优缺点,提供实施任何其中一个的技巧,或者建议其他方法。

谢谢,
Asaf

4个回答

4
我更喜欢“在代码配置”这个选项,是的,你会失去不需要重新编译就能修改的好处,但这取决于你的需求。如果你知道你永远不会更改端点或很少更改它 - 只需在代码中进行配置,您将获得编译时检查作为奖励 =) 这篇文章这篇文章可以帮助你。

顺便说一句,客户端配置中的配置是常见情况,如果你有很多这样的客户端,这可能会很麻烦,你应该考虑3或5 =)


我会手动复制配置,并稍后添加您推荐的内容。谢谢! - Asaf R

2
您可以在使用DLL的应用程序中将svcutil作为后构建事件使用。如下所示:

您可以在使用DLL的应用程序中将svcutil作为后构建事件使用。如下所示:

svcutil.exe <service_address> /config:$(TargetPath).config /mergeConfig

这将把必要的配置合并到yourapp.exe.config中。如果您在DLL中添加了新的服务引用,则需要在此处添加另一行,因此它不是完全自动化的,但仍比手动复制配置简单一些。

0

我应该选择选项1或2(对我来说,这个更好)。模块已经耦合在dll中,因此它们已经耦合。更改配置很简单,但为读取创建基础设施将使您更加耦合。

选项3和4需要更多的工作量。


0

我已经将我的开源Web服务框架编译成单个dll。虽然采用了完全不同的方法,但我为JSON和XML端点创建了通用的IHttpHandler(以及SOAP端点的通用WCF配置),可以处理每个请求。因此,我的配置是一个简单的一行代码适用于所有我的Web服务,将端点映射到我的处理程序,该处理程序驻留在应用程序主机.config文件中(即ASP.NET Web.config或Console App.config),这也是它的意图所在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接