c# - 网络服务包装器

标签 c# .net wcf web-services

我正在编写一个引用某些 WCF 服务的 dll。 dll 充当服务的网关,所有调用都通过它。 可能会有并发调用。

我已经引用了该服务,但现在我无法决定如何正确编写包装函数。

是否有此功能的示例或最佳实践。

最佳答案

我会制作与网络服务接口(interface)相匹配的包装器。包装所有暴露的对象也是一个好主意。基本上创建一个代理。我发现对这类事情真正有用的是创建一个与 API 匹配的接口(interface)并实现它。这样,您可以创建 DLL 的虚拟版本以进行测试,而不会产生与 WCF 调用相关的开销(或潜在成本)。如果您将来需要用备用提供程序替换 WCF 调用,这也会使它变得更加简单。

例如,假设我们有一个 WCF 服务供外部提供商处理付款。像这样:

void ProcessPayment(float amount);

我们可以很容易地将它挂接到我们的代码中。问题是对接口(interface)的简单更改将导致我们不得不在引用代码的所有地方进行更改。如果我们将提供者更改为其他人,即使界面几乎相同,也有必要这样做。添加类似简单界面的东西:

interface IPaymentProvider
{
    void ProcessPayment(float amount);
}

将我们的代码与 WCF 服务完全分离。我们可以很容易地构建一个这样的类:

class PaymentProviderAWrapper : IPaymentProvider
{
    void ProcessPayment()
    {
        // Call the WCF service
    }
}

我们可以使用像 Spring.NET 这样的工厂或依赖注入(inject)框架动态加载。更改为提供者 B 就像创建新包装器一样简单:

class PaymentProviderBWrapper : IPaymentProvider
{
    void ProcessPayment()
    {
        // Call provider B's Native DLL
    }
}

将您的代码从提供商 A 切换到 B 就像更改配置设置一样简单。

即使我们直接将库编译到我们的代码中,我们需要做的就是更改构造逻辑以使用新库。我们应用程序的其余部分根本不会改变。只是一个简单的重新编译。

关于c# - 网络服务包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383130/

相关文章:

wcf - 什么是 REST Web 服务?

c# - 将多个监听器绑定(bind)到同一个端口

c# - 注入(inject)属性不适用于字段

c# - Xamarin 表单应用程序的性能改进

c# - 与缓存交互时的线程安全

c# - 运行时代码覆盖工具

javascript - 使用WCF Rest进行跨域调用时出错

.net - 如何使用 .Net 4 进行 WCF 非 HTTP 激活?

读取文件时的C#编码

c# - 可以使用 C# new 关键字来扩展接口(interface)上的属性吗?