powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# трехзвенка
25 сообщений из 125, страница 4 из 5
C# трехзвенка
    #38252989
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Lelouch, вчера, 21:54 [14277989]
>а зачем код, при генерации клиента укажите создать асинхронные методы...

Извините, не понял. Если можно, поподробнее пожалуйста.
Код клиентского проекта приведен. Что и в каких свойствах проекта VS 2012 клиентского приложения надо задавать для автоматического формирования в прокси классе асинхронных методов?

С уважением, Владимир
...
Рейтинг: 0 / 0
C# трехзвенка
    #38253062
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,
проект клиента -> Service References -> Configure Service Reference...
...
Рейтинг: 0 / 0
C# трехзвенка
    #38253385
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Lelouch, сегодня, 11:23 [14278662]
>проект клиента -> Service References -> Configure Service Reference...
Извините, ещё один вопрос.Тема для меня больная.
Решение и его проекты заданы. В проекте клиента хочу определить методы прокси. Что имею - файл прилагаю. Что должно быть задано в полях диалоговых форм?

С уважением, Владимир
...
Рейтинг: 0 / 0
C# трехзвенка
    #38253392
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев,

Не увидел код Sergey TSV, он не использовал генерацию прокси )

Сделайте сервис по этому гайду: http://msdn.microsoft.com/ru-ru/library/bb386386.aspx
...
Рейтинг: 0 / 0
C# трехзвенка
    #38253781
Sergey TSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch правильно подсказал решение.

Для того чтобы служба могла дать информацию о своих метаданных, необходимо добавить в нее конечную точку MEX, т.е. немного изменить код службы.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
using System.ServiceModel.Description;
…
      ServiceHost host = new ServiceHost(typeof(MyService), new Uri("net.tcp://localhost:8523"));
      host.AddServiceEndpoint(typeof(IMyContract), new NetTcpBinding(), "");

      // Добавление точки MEX
      ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
      host.Description.Behaviors.Add(behavior);
      host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
 
      host.Open();



После этого запустить службу, сформировать автоматически прокси-класс с асинхронными методами (например, создать асинхронные операции для VS2012), посмотреть сформированные методы и продублировать их в вышеприведенном примере (я для этого наследую интерфейс контракта службы), т. е. методы
Код: c#
1.
2.
IAsyncResult BeginGetTable(AsyncCallback callback, object asyncState);
DataTable EndGetTable(IAsyncResult result);



Это, естественно, только один из множества возможных методов реализации асинхронных операций.
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254051
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Sergey TSV, Lelouch
СПА-СИ-БО!!!

С уважением, Владимир.
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254113
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey TSVLelouch правильно подсказал решение.

Для того чтобы служба могла дать информацию о своих метаданных, необходимо добавить в нее конечную точку MEX, т.е. немного изменить код службы.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
using System.ServiceModel.Description;
…
      ServiceHost host = new ServiceHost(typeof(MyService), new Uri("net.tcp://localhost:8523"));
      host.AddServiceEndpoint(typeof(IMyContract), new NetTcpBinding(), "");

      // Добавление точки MEX
      ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
      host.Description.Behaviors.Add(behavior);
      host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
 
      host.Open();



После этого запустить службу, сформировать автоматически прокси-класс с асинхронными методами (например, создать асинхронные операции для VS2012), посмотреть сформированные методы и продублировать их в вышеприведенном примере (я для этого наследую интерфейс контракта службы), т. е. методы
Код: c#
1.
2.
IAsyncResult BeginGetTable(AsyncCallback callback, object asyncState);
DataTable EndGetTable(IAsyncResult result);



Это, естественно, только один из множества возможных методов реализации асинхронных операций.

Гораздо проще и внятней c task&await
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254116
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

Generate task-based operations недоступно для FW4.0 к сожалению.
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254134
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchSeVa,

Generate task-based operations недоступно для FW4.0 к сожалению.

Генерировать прокси для своих сервисов - самый дубовый вариант. Это можно спокойно делать с помощью ChannelFactory .
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254135
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Async Targeting Pack для await в net 4.0
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254137
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

а что мешает сгенерировать прокси и использовать ChannelFactory?
Как такое применение ChannelFactory позволит легко создать асинхронные вызовы (На основе Task или Async, не важно)?

P.S. Самый дубовый вариант это писать руками то, что за тебя может написать среда.
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254143
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchSeVa,

а что мешает сгенерировать прокси и использовать ChannelFactory?
Как такое применение ChannelFactory позволит легко создать асинхронные вызовы (На основе Task или Async, не важно)?

P.S. Самый дубовый вариант это писать руками то, что за тебя может написать среда.

1.Среда генерит только никому не нужный мусор
2. При изменениях нужно вручную обновлять reference, когда их кол-во переваливает за десяток, такое пустопорожнее занятие становится весьма утомительным
3. ChannelFactory кэширует прокси и можно добиться увеличения производительности

и тд
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254145
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще не зло замечу, работать с инструментом и не знать всех возможностей - это уровень MCУ
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254148
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

1) Правильно, только хардкод, только руками.
2) Десяток? Зачем? что мешает объеденить их на сервере в 1 контракт? Как это сделано например вот тут: http://microsoftnlayerapp.codeplex.com/

авторИ еще не зло замечу, работать с инструментом и не знать всех возможностей - это уровень MCУ
3) При генерации прокси также создается и ChannelFactory если что.
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254149
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

и вы не ответили на вопрос:

авторКак такое применение ChannelFactory позволит легко создать асинхронные вызовы (На основе Task или Async, не важно)?

SeVaAsync Targeting Pack для await в net 4.0
И что, а Taskи руками будете описывать?
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254154
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

2) Поправка: не создается, но может быть использована вместе с созданым на клиенте интерфейсом.
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254155
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2)3)
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254166
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchSeVa,

1) Правильно, только хардкод, только руками.
2) Десяток? Зачем? что мешает объеденить их на сервере в 1 контракт? Как это сделано например вот тут: http://microsoftnlayerapp.codeplex.com/

авторИ еще не зло замечу, работать с инструментом и не знать всех возможностей - это уровень MCУ
3) При генерации прокси также создается и ChannelFactory если что.

1. Ты когда нибудь смотрел, что генериться в результате? Не мешало бы посмотреть, идет тупое дублирование кода и больше ничего.
2. Это на уровне советов mcy устраивать из всего одну большую помойку. Были и есть проекты, где этих сервисов сотни. Есть достаточно большая часть, которая используется совершенно в разных проектах одновременно. Плюс подобные сервисы создаются с помощью кодогенераторов, а потом билдятся на автомате
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254167
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchSeVa,

и вы не ответили на вопрос:

авторКак такое применение ChannelFactory позволит легко создать асинхронные вызовы (На основе Task или Async, не важно)?

SeVaAsync Targeting Pack для await в net 4.0
И что, а Taskи руками будете описывать?

Контракт должен быть с Task/Task<T>. Об этом можно прочитать в разделе what's new net 4.5.
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254177
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

1) Смотрел естественно. Там генерится нормальный интрефейс с асинхронными методами, который можно использовать в ChannelFactory.
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254178
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa,

При чем тут 4.5, я про 4.0 говорил. Вопросов про 4.5 изначально и не было. Та ссылка, что вы дали, показывает, как в 4.0 сделать доступным async/await, есть ли возможность в 4.0 использовать в контракте для ChannelFactory Task?
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254721
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>SeVa, вчера, 10:00 [14283368]
>Гораздо проще и внятней c task&await

Вы имеете ввиду нечто подобное ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
namespace ClientWcf {
   public class MyServiceClient : ClientBase<IMyContract>, IMyContract {
      public MyServiceClient(Binding binding, EndpointAddress endpointAddress) : base(binding, endpointAddress) { }
      public DataTable GetTable() {
         return Channel.GetTable();
      }
   }

  class Program {
     MyServiceClient client;
     
     public Program() {
        client = new MyServiceClient(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8523"));
     } 
     async Task<DataTable> tGetTable() {
         this.Info=Info;
         Task<DataTable> tdt = new Task<DataTable>(mtd_Запрос);
         tdt.Start();
         await tdt;
         return tdt.Result;
      }
    DataTable mtd_Запрос(){ return client.GetTable();}

    static void Main(string[] args) {
       Program oPrg = new Program();
       Task<byte[]> tdt = oPrg.tGetTable();
       //tdt.Wait();
       while (!xtb.IsCompleted ) {
          //-- Делаем что-нибудь видимое, двигаем ProgressBar к примеру
          . . .
          Thread.Sleep(500);
       }

       DataTable table = tdt.Result;
       foreach (DataRow row in table.Rows)
       Console.WriteLine(row["surname"]);
    }

      Console.ReadKey();
    }
  }
}
но этот вариант не работает в Moder UI (Win 8).

С уважением, Владимир
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254728
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ВМоисеев,сегодня, 08:48 [14285739]
Извините, ошибка, надо так:
. . .
while (!tdt.IsCompleted ) {
//-- Делаем что-нибудь видимое, двигаем ProgressBar к примеру
. . .
Thread.Sleep(500);
}
...
Рейтинг: 0 / 0
C# трехзвенка
    #38254742
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouchесть ли возможность в 4.0 использовать в контракте для ChannelFactory Task?Да, если самому написать генератор. Регуляркой распарсить результат svcutil.exe. Сгенерить нормального клиента с тасками, автозакрытием соединения и прочим. Обернуть всё это в T4 Text Template для удобства.
...
Рейтинг: 0 / 0
C# трехзвенка
    #38255791
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев
Коллеги, требуется помощь.
Крайне нужен пример кода работы с контрактами сервиса из приложения Modern UI (Win 8) с NetTcpBinding.

С уважением, Владимир.
...
Рейтинг: 0 / 0
25 сообщений из 125, страница 4 из 5
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# трехзвенка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]