Имам основно приложение от тип buddylist, което е pub/sub сделка в WCF. Проблемът ми е, че едно или две от обажданията се изпълняват дълго и това блокира цялото сървърно приложение (актуализации на GUI и т.н.).
Ето моят код:
[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) да бъде празен, когато приключи, да има друга крайна точка, която е в моя дуплексен договор, който ударих. Не ми харесва това, сякаш е фундаментална промяна в моята архитектура и ако низът е голям блок от текст през бавна интернет връзка, той все още ще страда от същия проблем?