我正在编写一个引用某些 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/