2013-01-30 4 views
0

Я использую библиотеки Portable Class для создания классов обслуживания, которые используют все наши технологии пользовательского интерфейса для связи с нашими службами.WCF Client CloseAsync vs Abort()

Эти библиотеки будут поддерживать Silverlight, Asp.Net и любую другую .Net-интерфейс.

Поскольку Silverlight поддерживается, все вызовы должны быть асинхронными.

С помощью Silverlight я могу позвонить CloseAsync() сразу после вызова клиента.Method().

Однако, я нахожу, что не работает с клиентами Asp.Net.

Я не хочу использовать CloseAync() в заполненном коде, потому что если выполняется несколько асинхронных вызовов, вы можете столкнуться с проблемой синхронизации.

Я бы предпочел не придумать много логики, как бы поместить цикл while в каждый асинхронный метод, чтобы убедиться, что CloseAsync() не был вызван и не завершен.

Сейчас я тестирую только использование Abort в завершенных разделах, и все работает нормально.

Любопытно, если кто-нибудь еще знает о каких-либо проблемах, с которыми мы можем столкнуться, используя Abort?

Спасибо.

Мы используем .Net 4.5.

ответ

0

Это зависит от того, какое обязательное вы используете. Если вы используете привязку, которая использует сеансы, то вызов Close [Async] попытается сначала закрыть этот сеанс (например, WSHttpBinding с надежным обменом сообщениями), а затем закрыть соединение, иначе он останется в живых на стороне сервера, пока не будет вне. Если вы используете привязку, которая не использует сеансы (т. Е. BasicHttpBinding), то они в значительной степени эквивалентны.

+0

Спасибо за ответ. Классы будут записаны для поддержки любой привязки, которую решает пользователь. У нас может быть пользовательский двоичный файл для клиента silverlight, net.tcp для клиента WPF и т. Д. Используемый будет основываться на значении, переданном в функцию Initialize. – kfrosty

+0

При взгляде на состояния, кажется, состояние закрывается сразу после вызова CloseAsync. Так что пока, в моей инициализации, я создаю экземпляр нового клиента, если состояние не открыто или создано. В завершенном коде я использую прерывание, если в противном случае состояние Faulted и CloseAsync(). Пока это работает как для клиентов Silverlight, так и для asp.net. – kfrosty

+0

Что касается клиента, это будет работать нормально. Но если у вас низкая квота сеанса сеанса на сервере, возможно, что она может быть удалена (например, новым клиентам может быть отказано в новом сеансе). Это произойдет только в том случае, если у вас очень большой трафик для конечных точек сеанса, поэтому для вас это не проблема. – carlosfigueira