C# 使用wcf客户端的最佳方式是什么?(内存方面)
我已经了解到wcf客户端的内存使用情况,到目前为止我所做的可能是错误的。C# 使用wcf客户端的最佳方式是什么?(内存方面),c#,wcf,wcf-client,C#,Wcf,Wcf Client,我已经了解到wcf客户端的内存使用情况,到目前为止我所做的可能是错误的。 当我使用wcf客户端时,我为每个调用创建了一个新的wcf客户端。(用于自托管和iis)。 这是去的路吗?当然,我应该创建一个客户机作为成员,并全面使用它? wcf客户端的真正内存使用情况是什么? 谢谢我认为您应该只在需要从新端点调用服务操作时创建新客户端,但绑定通常保持不变。因此,您可以创建一个工厂类,为特定的契约+绑定但不同的端点创建客户端。例如,以下内容适用于WebHttpBinding,但您可以替换所需的任何绑定:
当我使用wcf客户端时,我为每个调用创建了一个新的wcf客户端。(用于自托管和iis)。
这是去的路吗?当然,我应该创建一个客户机作为成员,并全面使用它?
wcf客户端的真正内存使用情况是什么?
谢谢我认为您应该只在需要从新端点调用服务操作时创建新客户端,但绑定通常保持不变。因此,您可以创建一个工厂类,为特定的契约+绑定但不同的端点创建客户端。例如,以下内容适用于WebHttpBinding,但您可以替换所需的任何绑定:
public class WebHttpClient<T>
{
protected WebHttpBinding Binding { get; private set; }
public WebHttpClient()
{
// set default binding here
}
public WebHttpClient(WebHttpBinding binding)
{
Binding = binding;
}
public T Get(string uri)
{
EndpointAddress _endpoint = new EndpointAddress(uri);
ChannelFactory<T> _factory = new ChannelFactory<T>(Binding, _endpoint);
_factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
return _factory.CreateChannel();
}
}
公共类WebHttpClient
{
受保护的WebHttpBinding{get;private set;}
公共WebHttpClient()
{
//在此处设置默认绑定
}
公共WebHttpClient(WebHttpBinding绑定)
{
绑定=绑定;
}
公共T获取(字符串uri)
{
EndpointAddress _endpoint=新的EndpointAddress(uri);
ChannelFactory _factory=新的ChannelFactory(绑定,_端点);
_添加(新的WebHttpBehavior());
返回_factory.CreateChannel();
}
}
其中T是您的服务合同 这意味着,如果您已经为特定绑定创建了客户端,工厂将返回创建的客户端?每次调用方法Get over时,它都将返回指定端点处的服务契约实现实例。有很多不同的方法可以走,但我认为使用ChannelFactory的基本公式最适合创建客户机。WCF操作中最昂贵的部分(据我所知)是创建客户机。上面的示例很好,但我会更进一步,为每个服务和缓存调用ChannelFactory一次,然后在创建通道时从缓存的副本执行该操作。这样,您可以生成多个通道,但只会产生一次初始成本。您是否确实存在内存问题?如果是这样:您正在处理它们吗?嗯,是的,我有内存问题,我通过使用语句松开
并正确地处理它们来修复它们,我想知道创建客户机最昂贵的部分是ChannelFactory
还是ChannelFactory.CreateChannel()
方法。