我有一个关于在非托管资源发挥作用时使用接口的问题。 假设我有一个Web服务并生成了WCF客户端。服务合同如下:
[ServiceContract]
public interface ITestService
{
[OperationContract]
string GetData(int value);
}
在客户端,我使用依赖注入并将ITestService接口绑定到TestServiceClient(使用svcutil
生成)。但是,当我创建ITestService并且它确实是TestServiceClient时,它应该以正确的方式处理,但客户端不知道它。
你是如何处理这个问题的?
我考虑过像这样生成代理类:
class TestServiceClientProxy : ITestService
{
#region ITestService Members
public string GetData(int value)
{
var client = new TestServiceClient();
bool success = false;
try
{
var result = client.GetData(value);
client.Close();
success = true;
return result;
}
finally
{
if (!success)
{
client.Abort();
}
}
}
#endregion
}
但是,我不认为代码生成是最好的方法。我应该使用一些AOP框架还是DynamicProxy?
提前感谢您的帮助。
答案 0 :(得分:0)
声明您的接口实现了IDisposable,在具体类中实现Dispose(),并且您的DI提供程序将正确处理它。如果您的DI提供商不这样做,请找一个新的。
[ServiceContract]
public interface ITestService : IDisposable
{
[OperationContract]
string GetData(int value);
}