powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF предобработка на клиенте
19 сообщений из 19, страница 1 из 1
WCF предобработка на клиенте
    #36073454
Red Wind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток,
Только начинаю изучать wcf, не судите строго. Мне нужно, что бы на клиенте, при каждом вызове метода remoteObject.GetUsers() предобработать (изменить значения нескольких полей) возвращаемый им объект. Как это можно реализовать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
            var factory = new ChannelFactory<IDataProvider>(new BasicHttpBinding());
            IDataProvider remoteObject = factory.CreateChannel(new EndpointAddress("http://localhost:9001/NorthwindService"));
            Console.WriteLine("Users list:");
            foreach (var user in remoteObject.GetUsers())
            {
                Console.WriteLine(String.Format("User id = {0} name = {1}", user.UserId, user.FirstName));
            }
            Console.ReadKey();
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073621
WCF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF
Гость
Клиент не возвращает, а запрашивает.

Можно Behavior добавить.
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073654
Red Wind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WCF, подробнее можешь обяснить?
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073748
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Red Wind,

Зависит от того, как вы remoteObject создаете.
Если через "Update serrice reference" (автогенерация) - то можно partial класс дописать, и в нем добавить нужные функции или свойства.
Если же у вас самописный remoteObject - промежуточная сборка, или полная сборка - то в ней и добавьте нужные действия. Для серверной части можете использовать серверный набор методов, а для клиентской - клиентский.

Если я вас правильно понял, конечно.
:)
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073765
Red Wind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, похоже правильно. Тольо я имел ввиду несколько другое. Я не хочу писать врапперы на каждый метод. А хочу создать типа фильтра, через котрый будут проходить вызовы всех методов. Или как-нибудь повесить обработчики событий на методы.
Сейчас у меня сделано как написал D129. Но мне такой подход не нравиться, потому что для всех моих методов нужна однотипная обработка и количество методов постоянно ростёт.
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073774
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Red WindДа, похоже правильно. Тольо я имел ввиду несколько другое. Я не хочу писать врапперы на каждый метод. А хочу создать типа фильтра, через котрый будут проходить вызовы всех методов. Или как-нибудь повесить обработчики событий на методы.
Сейчас у меня сделано как написал D129. Но мне такой подход не нравиться, потому что для всех моих методов нужна однотипная обработка и количество методов постоянно ростёт.
Тогда выход (красивный :) ) - только один. Если клиентам нужно одно и то же - то это проблема сервера. При обработке запроса от клиента и делайте необходимую пред-обработку.
Если нужно, то в запросе передавайте серверу клиентские параметры (чтобы он выбрал тип "предобработки").
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073820
Red Wind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю так не получиться:). Собственно зачем мне это понадобилось. Я делаю нейкое подобие орм с Lazy Loading'ом. У объекта может быть коллекция других объектов, и вот эту коллекцию я подгружаю Lazy Loading'ом. Что бы её подгрузить я сделал к каждого Data Transfer Objecta поле типа IDataProvider. IDataProvider это тот же интерфейс который возвращает factory.CreateChannel. И мне надо всем моим DTO пришедшим с сервера дать ссылку на remoteObject который реализует IDataProvider (см код выше), что бы они могли загружать свои коллекции с сервера.
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073838
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Red Wind DTO пришедшим с сервера дать ссылку на remoteObject который реализует IDataProvider (см код выше), что бы они могли загружать свои коллекции с сервера.
Я сделал статический класс, и инициирую его в момент установления связи с сервером.
Более того, так как клиент у меня с авторизацией (дополнительной, не протокольной)
То прокси держится в обертке подсоединенного пользователя.
Код: plaintext
wClient.CurrentUser.Proxy.GetAllData(...)
И все.
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073843
Red Wind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
D129, не совсем понял.
Код: plaintext
1.
wClient.CurrentUser.Proxy.GetAllData(...)
Что делает класс Proxy вообще и метод GetAllData в часности?
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073852
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Red WindD129, не совсем понял.
Код: plaintext
1.
wClient.CurrentUser.Proxy.GetAllData(...)
Что делает класс Proxy вообще и метод GetAllData в часности?

Это урезанный пример из кода.

Код: plaintext
public static wUser CurrentUser

а в нем уже
Код: plaintext
1.
public wGuiServiceClient Proxy

А инициализация происходит при подключении -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
wGuiServiceClient proxy = new wGuiServiceClient();
CurrentUser = proxy.OpenSession(userName, password, ref replyMessage);
			
if (CurrentUser == null)
{
	...
	proxy.Close();
	return;
}
CurrentUser.Proxy = proxy;


И потом, в любом месте

Код: plaintext
1.
2.
3.
foreach (var contentEntity in uniList)
{
	wClient.CurrentUser.Proxy.Save(contentEntity, ref replyMessage);
}
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073860
Red Wind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А метод GetAllData что возвращает?
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073867
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Red Wind,

Конкретно этот - это я просто код подпортил (чтобы лишний раз не светиться), нет у меня такого метода,
А вообще есть GetBy со строкой параметров и массивом самих параметров, который возвращает из коллекции как базовый класс некий производный -


сначала это было так - когда я всем формам создавал своего клиента:

Код: plaintext
List<wHandlingUnitEntity> huList =  proxy.GetBy("wHandlingUnitEntity", "LocationPointId = @0", locationPoint.ID).Cast<wHandlingUnitEntity>().ToList();


А так теперь, когда прокси один на всю аппликацию (а он и нужен один):
Код: plaintext
List<wLocationTemplateDetailsEntity> resultList = wClient.CurrentUser.Proxy.GetBy("wLocationTemplateDetailsEntity", "LocationTemplateHeaderId = @0", Id).Cast<wLocationTemplateDetailsEntity>().ToList();	

Сама GetBy:

Код: plaintext
1.
2.
  public WMSClient.WmsGuiServiceReference.WhBaseEntity[] GetBy(string entityTypeName, string paramString, params object[] paramValues) {
            return base.Channel.GetBy(entityTypeName, paramString, paramValues);
        }

Это вызов динамического Linq на стороне сервера. Но это уже другая история.
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36073956
Red Wind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем понятно. У меня сейчас сделано похоже. Но как этот позволяет избавиться от враперов методов на клиенте?
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36074026
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Red WindВ общем понятно. У меня сейчас сделано похоже. Но как этот позволяет избавиться от враперов методов на клиенте?
Вы хотите сразу вот это вызывать?

Код: plaintext
base.Channel.GetBy()
?
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36074027
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Red WindВ общем понятно. У меня сейчас сделано похоже. Но как этот позволяет избавиться от враперов методов на клиенте?
Вы хотите сразу вот это вызывать?

Код: plaintext
base.Channel.GetBy()
?
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36074031
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опс.. дублянулся....
Море излечило меня от Джихада...(с)
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36075276
Red Wind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
D129Red WindВ общем понятно. У меня сейчас сделано похоже. Но как этот позволяет избавиться от враперов методов на клиенте?
Вы хотите сразу вот это вызывать?

Код: plaintext
base.Channel.GetBy()
?
Грубо говоря да. То есть предобработка без враппера.
Хотя есть подозрения, что средствами wcf такого не сделать. Или я всётаки ошибаюсь?
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36075313
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Red Wind
Грубо говоря да. То есть предобработка без враппера.
Хотя есть подозрения, что средствами wcf такого не сделать. Или я всётаки ошибаюсь?
У меня тоже есть такое подозрение, ну посмотрите, что там с behavior можно сделать... но мне кажется, что ссылки изнутри протокола дать нельзя. Надо же сначала обьект создать....
...
Рейтинг: 0 / 0
WCF предобработка на клиенте
    #36076257
Red Wind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за советы.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF предобработка на клиенте
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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