Я собираю службу WCF, используя net.tcp и netTcpBinding, чтобы получить двустороннюю связь с моим клиентом Silverlight.Я вызываю службу из приложения Silverlight, и служба вызывает другой сервер, передавая ему метод обратного вызова в классе обслуживания WCF.Удаленный сервер перезванивает несколько раз, и каждый раз служба WCF использует канал обратного вызова для отправки данных клиенту Silverlight.В большинстве случаев все работает хорошо.
Если пользователь отправляет большой запрос, я получаю исключение TimeoutException после того, как большое количество обратных вызовов уже сработало.(Ясно, что в другом месте есть работа, чтобы предотвратить это, но я бы хотел сначала обнародовать сервис.)
Я ожидал сделать что-то вроде 'if (client.ConnectionState == failed)'проверьте, прежде чем пытаться перезвонить клиенту Silverlight, но я не могу найти объект, который содержит состояние соединения.Есть один?Я подхожу к этому не с той стороны?
Это мое первое предприятие в сервисе net.tcp и duplex.Я только что переехал, и моя библия WCF все еще в коробке.Где-то.:-) Так что я не могу сделать свое обычное фоновое чтение.
Любые указатели будут с благодарностью приняты.Вот некоторый голый код на случай, если моё описание слишком густое:
private IActiveDirectoryClient client;
private AsyncSearchRunner runner;
public void Search(Request request)
{
this.client = OperationContext.Current.GetCallbackChannel<IActiveDirectoryClient>();
runner = new AsyncSearchRunner();
runner.Run(request.SearchRoot, request.SearchFilter, request.PageSize,
System.DirectoryServices.Protocols.SearchScope.Subtree, SendObjects);
}
private void SendObjects(List<DirectoryObject> items)
{
Response response = new Response();
response.DirectoryObjects = items.ToArray();
client.SendResponse(response);
}