извините за задержку с вами.Одна из проблем, которые, я думаю, у вас есть, заключается в том, что вы неправильно создаете экземпляр своего прокси.Не уверен, что вы делаете channelprovider, но создание собственного канала довольно просто и может не нуждаться в оболочке.
Я попробовал простой тест, используя старый пример сервиса калькулятора, и обнаружил, что у меня нет проблем с сохранением открытого канала.
Сначала я создал два поля ...
private ChannelFactory<ICalculator> m_Factory;
private ICalculator m_Proxy;
Затем создал экземпляр фабрики в конструкторе, используя конфигурацию клиента в файле конфигурации.
m_Factory = new ChannelFactory<ICalculator>("calc");
Затем, когдавызывая сервис, я создаю свой прокси и выполняю асинхронный метод.Как только вызов возвращен, я преобразовываю прокси в объект ICommunicationObject, который сообщает мне состояние моего канала.Вы должны увидеть, что вызванный вами прокси-сервер все еще открыт.После этого вы сможете закрыть его.
void OnBegin(object sender, EventArgs e)
{
m_Proxy = m_Factory.CreateChannel();
m_Proxy.BeginAdd(2, 3, OnCompletion, null);
// Do other stuff...
}
void OnCompletion(IAsyncResult result)
{
int sum = m_Proxy.EndAdd(result);
result.AsyncWaitHandle.Close();
ICommunicationObject channel = (ICommunicationObject)m_Proxy;
if (channel.State == CommunicationState.Opened)
channel.Close();
}
Надеюсь, это поможет.