封装服务引用

我正在构建一组控制台应用程序,它们都需要引用Web服务。 我有一个类库,其中包含这些应用程序的大部分共享function,包括Web服务(已添加为服务引用)。 我知道处理这个问题的“正确”方法是将块从类库的app.config复制到每个控制台应用程序,但这会导致维护问题。 我还找到了使用共享app.config文件的替代方法,并从每个应用程序的配置中引用它。 这样做更好,但仍然不是很好 – 它仍然涉及手动配置每个新应用程序,并要求我确保共享配置文件位于所有应用程序都可以访问的位置。

我正在寻找的是三件事之一(满意度下降):

  1. 一种将整个服务以及访问它所需的所有内容封装到从类库生成的dll中的方法。
  2. 一种将相关配置信息自动复制到每个控制台应用程序的构建目录(例如构建后脚本)的方法。
  3. 解释为什么前两者都不可行。 (在这种情况下,我将使用共享配置)

任何建议?

诚实2是微不足道的。 您可以轻松地将配置文件复制到构建目录。 一个简单的谷歌搜索可以为您提供所需的一切。

对于第1部分,您可以在此处选择,我建议您只需在界面表单中为您的服务定义API。 然后使用DI通过dll插入“实现”。 它一直使用适配器模式完成 ,然后使用Unity之类的东西来进行运行时实现。

伪:

 interface IMyServiceAdaptor { void SomeMethod(params ); void SomeMethod2(params ); } public class ServiceAdaptor : IMyServiceAdaptor{ #psudo code ServiceProxyClient client { get;set;} public void SomeMethod(parms){ var convertedParams = Convert(parms); return client.SomeMethod(convertedParams ); } ...etc } public class MyClient { [Dependancy] IMyServiceAgent agent { get;set;} public MyClient(){ #resolve } 

}


概念很简单。 您有一个服务的内部表示(IMyServiceAdaptor)。 重要的是它完全独立于实际调用您的服务的底层代理(服务引用)调用。 我们的想法是为您的服务创建友好的界面,并与您进行交互。 您始终调整服务以满足您的应用程序界面API。 这将保护您免受服务端的更改,提供可用于注入的接口,以及允许您插入一些额外的逻辑来处理故障。

在花了一些时间研究其他事情之后,我回到了这个问题并在这里找到了一个相关的问题。 Trond对这个问题的回答对我来说很合适,并且比其他任何东西都简单得多。