| 
 | 
| 
 
Как сослаться на базовые методы сервиса на клиентской стороне? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Пусть у меня есть на сервере базовый классс службы, и пара производных от него. Я с помощью "Add Service Reference" создал на клиенте прокси для производных классов службы. Теперь хочу на этом же клиенте передать в какой-нибудь метод любой из этих проксей так, чтобы можно было воспользоваться базовыми методами службы. Типа такого: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Как этого добиться? Ведь созданные прокси - это совершенно независимые классы без общего предка. Другими словами, на сервере известно, что службы имеют общего предка, и можно передать эти службы как базовый класс, а на сервере - нет. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 23.09.2016, 09:28 | 
  
  
  
   | 
||
| 
 
Как сослаться на базовые методы сервиса на клиентской стороне? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Вроде, есть возможность вручную сгенерить прокси-классы, отнаследовавшись от встроенного в .NET ClientBase. Тогда в моей задаче нужно что-то вроде: 1) создать базовую службу, а не просто класс базовой службы, от которой наследуются другие классы служб (т. е. запустить эту службу с базовой реализацией); 2) сгенерить прокси на эту базовую службу с помощью той же "Add service reference"; 3) вручную создать потомки от получившегося базового прокси, которые как-то "переназначить" на службы ServiceA и ServiceB? Как-то слишком сложно получается, да и не уверен, что это в принципе возможно - то, что я выше написал. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 23.09.2016, 10:48 | 
  
  
  
   | 
||
| 
 
Как сослаться на базовые методы сервиса на клиентской стороне? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Я добавил пример кода иерархии моих служб - всё очень просто и примитивно. base service: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. service A: Код: c# 1. 2. 3. 4. 5. 6. service B: Код: c# 1. 2. 3. 4. 5. 6. На клиенте я создаю прокси-классы с помощью инструмента "Add service reference" в Студии: Код: c# 1. 2. И я хочу передать эти прокси в метод. Как? Типа такого: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Т. е. я хочу передать эти прокси в качестве параметра и вызвать метод из базового класса сервиса. Как это сделать? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 29.09.2016, 14:50 | 
  
  
  
   | 
||
| 
 
Как сослаться на базовые методы сервиса на клиентской стороне? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Да, эти два прокси - ProxyA proxyServiceA; ProxyB proxyServiceB; это ссылки на две разные службы . Может ли быть какой-то базовый класс на клиенте, который бы распознавался как базовый для этих двух проксей и его можно было бы указать в качестве параметра в методе WorkMethod? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 29.09.2016, 14:52 | 
  
  
  
   | 
||
| 
 
Как сослаться на базовые методы сервиса на клиентской стороне? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Вобщем, выделю главный вопрос. Как сделать так, чтобы на клиенте был класс, который бы был базовым для прокси-классов, ссылающихся на две разные службы, имеющие тоже базовый класс (на серверной стороне)? Ну, естественно, это не должен быть фреймворковский ClientBase/ ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 29.09.2016, 15:00 | 
  
  
  
   | 
||
| 
 
Как сослаться на базовые методы сервиса на клиентской стороне? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Doomplay998, Возможно нужно копать в направлении Channel Factory. http://www.codeproject.com/Tips/558163/Difference-between-Proxy-and-Channel-Factory-in-WC Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. В вашем случае нужно создавать ChannelFactory<IServiceBase>. PS. рекомендую вообще отходить от автоматически сгенерированных прокси классов. Они слишком избыточны. Все, что в них есть лучше реализовать ручной реализацией ChannelFactory. У этого решения много плюсов, в том числе (насколько помню) в том, что Прокси классы на каждый запрос создают новый канал - т.е. тратится время на установление соединения. Если же работать с вручную созданной фабрикой, то канал создается через CreateChannel и освобождается тогда, когда он уже не нужен. Обмен в WCF идет через контракты, выраженные в интерфейсе. Создается канал настроенный на заданный интерфейс и дергаются методы этого канала. Если у сервера есть эти методы, то он их примет и обработает. Сервер вообще не знает что там на стороне клиента. Интерфейс на стороне клиента можно вообще написать от руки, сколь-угодно усеченный по отношению к количеству методов сервера (или сгенерить утилитами, а потом отредактировать). Никакой сверки идентичности контрактов не происходит насколько я понимаю - важно лишь имя вызываемого метода, соответствие количества и типов параметров. Сетевой обмен не так жестко связан как, например, код одного локального проекта. (ссылка для привлечения внимания :) ) http://martinfowler.com/bliki/TolerantReader.html be conservative in what you do, be liberal in what you accept from others . ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.10.2016, 18:56 | 
  
  
  
   | 
||
| 
 
Как сослаться на базовые методы сервиса на клиентской стороне? 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  ProBiotek, т. е. то, что я не могу создать автоматически сгенеренный прокси для базового класса службы - это ограничение генераторы этих проксей, а не вообще ограничение WCF? Спасибо, попробую ваш совет. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.10.2016, 19:37 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?fid=19&tid=1396747]:  | 
    0ms | 
get settings:  | 
    10ms | 
get forum list:  | 
    12ms | 
check forum access:  | 
    3ms | 
check topic access:  | 
    3ms | 
track hit:  | 
    42ms | 
get topic data:  | 
    10ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    36ms | 
get tp. blocked users:  | 
    1ms | 
| others: | 228ms | 
| total: | 347ms | 

| 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.