I wrote Sdk, which is used by the WPF client, and takes care of calling WCF services and caching. These WCF services are called using ChannelFactory, so I have no service references. To do this, I created a factory that handles the opening and closing of ChannelFactory and ClientChannel as follows:
public class ProjectStudioServiceFactory : IDisposable
{
private IProjectStudioService _projectStudioService;
private static ChannelFactory<IProjectStudioService> _channelFactory;
public IProjectStudioService Instance
{
get
{
if (_channelFactory==null) _channelFactory = new ChannelFactory<IProjectStudioService>("ProjectStudioServiceEndPoint");
_projectStudioService = _channelFactory.CreateChannel();
((IClientChannel)_projectStudioService).Open();
return _projectStudioService;
}
}
public void Dispose()
{
((IClientChannel)_projectStudioService).Close();
_channelFactory.Close();
}
}
And every request that I call:
using (var projectStudioService = new ProjectStudioServiceFactory())
{
return projectStudioService.Instance.FindAllCities(new FindAllCitiesRequest()).Cities;
}
Although this works, it is slow because for each request, the client channel and factory open and close. If I keep it open, it's very fast. But I was wondering what would be the best practice? Should I keep it open? Or not? How to handle this method?
source
share