Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF предобработка на клиенте / 19 сообщений из 19, страница 1 из 1
04.07.2009, 16:22
    #36073454
Red Wind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
Доброго времени суток,
Только начинаю изучать 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
04.07.2009, 23:32
    #36073621
WCF
WCF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
Клиент не возвращает, а запрашивает.

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

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

Если я вас правильно понял, конечно.
:)
...
Рейтинг: 0 / 0
05.07.2009, 13:22
    #36073765
Red Wind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
Да, похоже правильно. Тольо я имел ввиду несколько другое. Я не хочу писать врапперы на каждый метод. А хочу создать типа фильтра, через котрый будут проходить вызовы всех методов. Или как-нибудь повесить обработчики событий на методы.
Сейчас у меня сделано как написал D129. Но мне такой подход не нравиться, потому что для всех моих методов нужна однотипная обработка и количество методов постоянно ростёт.
...
Рейтинг: 0 / 0
05.07.2009, 13:39
    #36073774
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
Red WindДа, похоже правильно. Тольо я имел ввиду несколько другое. Я не хочу писать врапперы на каждый метод. А хочу создать типа фильтра, через котрый будут проходить вызовы всех методов. Или как-нибудь повесить обработчики событий на методы.
Сейчас у меня сделано как написал D129. Но мне такой подход не нравиться, потому что для всех моих методов нужна однотипная обработка и количество методов постоянно ростёт.
Тогда выход (красивный :) ) - только один. Если клиентам нужно одно и то же - то это проблема сервера. При обработке запроса от клиента и делайте необходимую пред-обработку.
Если нужно, то в запросе передавайте серверу клиентские параметры (чтобы он выбрал тип "предобработки").
...
Рейтинг: 0 / 0
05.07.2009, 15:18
    #36073820
Red Wind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
Думаю так не получиться:). Собственно зачем мне это понадобилось. Я делаю нейкое подобие орм с Lazy Loading'ом. У объекта может быть коллекция других объектов, и вот эту коллекцию я подгружаю Lazy Loading'ом. Что бы её подгрузить я сделал к каждого Data Transfer Objecta поле типа IDataProvider. IDataProvider это тот же интерфейс который возвращает factory.CreateChannel. И мне надо всем моим DTO пришедшим с сервера дать ссылку на remoteObject который реализует IDataProvider (см код выше), что бы они могли загружать свои коллекции с сервера.
...
Рейтинг: 0 / 0
05.07.2009, 15:46
    #36073838
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
Red Wind DTO пришедшим с сервера дать ссылку на remoteObject который реализует IDataProvider (см код выше), что бы они могли загружать свои коллекции с сервера.
Я сделал статический класс, и инициирую его в момент установления связи с сервером.
Более того, так как клиент у меня с авторизацией (дополнительной, не протокольной)
То прокси держится в обертке подсоединенного пользователя.
Код: plaintext
wClient.CurrentUser.Proxy.GetAllData(...)
И все.
...
Рейтинг: 0 / 0
05.07.2009, 15:55
    #36073843
Red Wind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
D129, не совсем понял.
Код: plaintext
1.
wClient.CurrentUser.Proxy.GetAllData(...)
Что делает класс Proxy вообще и метод GetAllData в часности?
...
Рейтинг: 0 / 0
05.07.2009, 16:06
    #36073852
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
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
05.07.2009, 16:15
    #36073860
Red Wind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
А метод GetAllData что возвращает?
...
Рейтинг: 0 / 0
05.07.2009, 16:29
    #36073867
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
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
05.07.2009, 19:04
    #36073956
Red Wind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
В общем понятно. У меня сейчас сделано похоже. Но как этот позволяет избавиться от враперов методов на клиенте?
...
Рейтинг: 0 / 0
05.07.2009, 20:21
    #36074026
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF предобработка на клиенте
Red WindВ общем понятно. У меня сейчас сделано похоже. Но как этот позволяет избавиться от враперов методов на клиенте?
Вы хотите сразу вот это вызывать?

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

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

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


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