Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> синхронные службы и вызовы 
:(
    Опции темы
nvb
Дата 14.12.2012, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 31.1.2012

Репутация: нет
Всего: нет



Почитал msdn и Matthew MacDonald и возник следующий вопрос.
В чем разница, между созданием асинхронных методов веб-службы и асинхронным вызовом синхронного метода веб-службы с помощью делегатов и с помощью прокси класса? Чтоб было понятно, о чем вопрос, приведу код всех трех способов:

1) Определяем асинхронные методы веб-службы.
Код


public class MyService : WebService 
{
    public RemoteService remoteService;
    public MyService() 
    {
        // Create a new instance of proxy class for 
        // the Web service to be called.
        remoteService = new RemoteService();
    }
    // Define the Begin method.
    [WebMethod]
    public IAsyncResult BeginGetAuthorRoyalties(String Author,
        AsyncCallback callback, object asyncState) 
    {
        // Begin asynchronous communictation with a different XML Web
        // service.
        return remoteService.BeginReturnedStronglyTypedDS(Author,
            callback,asyncState);
    }
    // Define the End method.
    [WebMethod]
    public AuthorRoyalties EndGetAuthorRoyalties(IAsyncResult
        asyncResult) 
    {
        // Return the asynchronous result from the other Web service.
        return remoteService.EndReturnedStronglyTypedDS(asyncResult);
    }
}


2) Вызываем синхронные методы с помощью асинхронных делегатов
Код

protected void cmdAsynchronous_Click(object sender, System.EventArgs e)
{
// Записываем время начала.
DateTime startTime = DateTime.Now;
// Запускаем Web-службу в другом потоке.
EmployeesService proxy = new EmployeesService();
GetEmployeesDelegate async = new GetEmployeesDelegate(proxy.GetEmployees);
IAsyncResult handle = async.BeginInvoke(null, null);
// Выполняем какие-то другие длительные по времени задачи.
DoSomethingSlow();
// Извлекаем результат. Если он еще не готов, ожидаем.
try
{
 GridView1.DataSource = async.EndInvoke(handle);
}
catch (Exception err)
{
 lblInfo.Text = "Problem contacting web service.";
 return;
}
GridView1.DataBind();
// Определяем общее количество затраченного времени.
TimeSpan timeTaken = DateTime.Now.Subtract(startTime);
lblInfo.Text = "Asynchronous operations took " + timeTaken.TotalSeconds +
" seconds.";
}


3) Вместо делегатов используем прокси класс

Код

public long[] Factorize(long factorizableNum)
public System.IAsyncResult BeginFactorize(long factorizableNum, System.AsyncCallback callback, object asyncState)
public long[] EndFactorize(System.IAsyncResult asyncResult)


В общем, проясните, пожалуйста ситуацию. Скажем, если есть метод долго обращающийся к БД, каким способом реализовать асинхронность?
Спасибо. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0928 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.