C # WCF NetTCPBinding Blocking Application

У меня есть базовое приложение типа buddylist, которое сделка pub / sub в WCF. Моя проблема в том, что один или два вызова выполняются долго, и это блокирует все серверное приложение (обновления графического интерфейса и т. д.).

Вот мой код:

[ServiceContract(SessionMode = SessionMode.Required,
CallbackContract = typeof(IBuddyListContract))]
public interface IBuddyListPubSubContract
{
    [OperationContract]
    string GetABunchOfDataZipped(String sessionId); // this can take > 20 seconds

    ....
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, 
    ConcurrencyMode = ConcurrencyMode.Multiple)]
public class BuddyListPubSubContract : IBuddyListPubSubContract
{
    string GetABunchOfDataZipped(String sessionId)
    {
        // do some calculations and data retrival
        return  result;
    }
}

Пока что у меня есть идея о том, как это сделать, но есть ли более простой способ?

Идея 1 : GetABunchOfDataZipped (String sessionId) будет недействительным, когда он закончится, будет иметь другую конечную точку, которая в моем дуплексном контракте, которую я ударил. Мне не нравится это как фундаментальное изменение в моей архитектуре, и если строка представляет собой большой блок текста при медленном подключении к Интернету, она все равно будет страдать от той же проблемы?

6
задан Tad Donaghe 31 May 2011 в 19:19
поделиться