powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непонятно с наследованием интерфейсов и классов
23 сообщений из 23, страница 1 из 1
Непонятно с наследованием интерфейсов и классов
    #39169294
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, это в контексте WCF у меня, но думаю, что это общий вопрос, не только с WCF связанный.

Есть у меня следующая иерархия

Код: c#
1.
2.
3.
4.
5.
6.
7.
public interface IServiceBase

public class ServiceBase : IServiceBase

public interface ITestService

public class TestService : ServiceBase, ITestService



Проблема в том, что клиент видит у службы только элементы ITestService. Почему так?

Я догадываюсь, что надо отнаследовать ITestService от IServiceBase, но разве это наследование уже не включено в части
Код: c#
1.
TestService : ServiceBase



объявления класса TestService? Если я ещё и интерфейс отнаследую, не будет ли это двойным наследованием (это, вообще, допустимо?)?
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39169298
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И если надо точно отснаследовать интерфейс, не могли бы вы указать, где в МСДН об этом конкретно говорится для вот таких вот случаев. Может, какое-то глобальное правило языка?
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39169300
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11NardoИ если надо точно отснаследовать интерфейс, не могли бы вы указать, где в МСДН об этом конкретно говорится для вот таких вот случаев. Может, какое-то глобальное правило языка?
Ну т. е., что наследуя от класса, наследующего от интерфейса, я не наследую от этого интерфейса ("вассал моего вассала не мой вассал").
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39169301
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11NardoЯ догадываюсь, что надо отнаследовать ITestService от IServiceBaseДа
Leo11Nardoно разве это наследование уже не включено в части
Код: c#
1.
TestService : ServiceBase

объявления класса TestService?Нет
Leo11NardoЕсли я ещё и интерфейс отнаследую, не будет ли это двойным наследованием?Нет
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39169304
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это особенность WCF, то пусть модераторы перенесут это в соответствующий раздел.
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39170598
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм, сейчас проверил - это явно особенность WCF, т. к. на обычных классах и интерфейсах всё видно и без наследования

Код: c#
1.
public interface ITestService : IServiceBase
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39170601
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11NardoХмм, сейчас проверил - это явно особенность WCF, т. к. на обычных классах и интерфейсах всё видно и без наследования

Код: c#
1.
public interface ITestService : IServiceBase


Т. е. вот такой код работает в каком-нибудь консольном приложении - метод BaseMethod вызывается.

Код: c#
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.
    public interface IServiceBase
    {
        void BaseMethod();
    }

    public class ServiceBase : IServiceBase
    {
        public void BaseMethod() { }
    }

    public interface ITestService
    {
        void TestMethod();
    }

    public class TestService : ServiceBase, ITestService
    {
        public void TestMethod() { }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var ts = new TestService();
            ts.BaseMethod();
        }
    }


В контексте же WCF клиенты, созданные из TestService, не видят BaseMethod, пока я не отнаследую ITestService от IServiceBase.
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39170608
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11NardoВ контексте же WCF клиенты, созданные из TestService, не видят BaseMethod, пока я не отнаследую ITestService от IServiceBase.Ну так опиши контракт WCF сервиса в классе, а не в интерфейсе, и будет как в "консольном приложении".
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39170617
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КLeo11NardoВ контексте же WCF клиенты, созданные из TestService, не видят BaseMethod, пока я не отнаследую ITestService от IServiceBase.Ну так опиши контракт WCF сервиса в классе, а не в интерфейсе, и будет как в "консольном приложении".
Но тогда клиентские прокси-генераторы не сгенерят мне прокси через AddServiceReference, да? Они же только на интерфейсы полагаются by design?
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39170764
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11NardoОни же только на интерфейсы полагаются by design?Нет, им пофиг. С тем же успехом атрибуты, вроде OperationContract, можно указывать методам классов.
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39170866
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КLeo11NardoОни же только на интерфейсы полагаются by design?Нет, им пофиг. С тем же успехом атрибуты, вроде OperationContract, можно указывать методам классов.
Но тогда ещё один аргумент против классов и за интерфейсы - вроде как есть идеология, что клиентам надо давать интерфейсы, а классы скрывать на сервере. По подобной же причине разделяют интерфейсы и их реализации на отдельные сборки, и ту, которая с интерфейсами - отдаётся клиенту, а реализации в скрытой от него сборке находятся.

Есть такое?
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39170959
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11NardoАлексей Кпропущено...
Нет, им пофиг. С тем же успехом атрибуты, вроде OperationContract, можно указывать методам классов.
Но тогда ещё один аргумент против классов и за интерфейсы - вроде как есть идеология, что клиентам надо давать интерфейсы, а классы скрывать на сервере. По подобной же причине разделяют интерфейсы и их реализации на отдельные сборки, и ту, которая с интерфейсами - отдаётся клиенту , а реализации в скрытой от него сборке находятся.

Есть такое?Есть такое. Но если клиент генерируется по WSDL-схеме, то от этих интерфейсов лично я пользы не вижу.
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39170962
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КLeo11Nardoпропущено...

Но тогда ещё один аргумент против классов и за интерфейсы - вроде как есть идеология, что клиентам надо давать интерфейсы, а классы скрывать на сервере. По подобной же причине разделяют интерфейсы и их реализации на отдельные сборки, и ту, которая с интерфейсами - отдаётся клиенту , а реализации в скрытой от него сборке находятся.

Есть такое?Есть такое. Но если клиент генерируется по WSDL-схеме, то от этих интерфейсов лично я пользы не вижу.
Зачем же тогда во всех мануалах на МСДН пишут WCF-сервисы через интерфейсы и шаблон начального проекта для такого сервиса тоже через них? Какой-то best practice или просто интерфейс головного мозга у проектировщиков WCF, которые своё видение всем навязывают? Знаю тех, которые любую иерархию классов разрабатывают через интерфейсы - сначала их напишут, потом классы. Не разбираясь с тем, нужно ли это - просто так, на всякий случай. Да и привыкли они так. То же и с тест дривен девелопмент - некоторые уже и забыли, что можно как-то по-другому и не обязательно тесты писать на всякие примитивные действия.
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39170964
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11NardoАлексей Кпропущено...
Есть такое. Но если клиент генерируется по WSDL-схеме, то от этих интерфейсов лично я пользы не вижу.
Зачем же тогда во всех мануалах на МСДН пишут WCF-сервисы через интерфейсы и шаблон начального проекта для такого сервиса тоже через них? Какой-то best practice или просто интерфейс головного мозга у проектировщиков WCF, которые своё видение всем навязывают?Я не могу за них ответить.
Leo11NardoЗнаю тех, которые любую иерархию классов разрабатывают через интерфейсы - сначала их напишут, потом классы. Не разбираясь с тем, нужно ли это - просто так, на всякий случай. Да и привыкли они так. То же и с тест дривен девелопмент - некоторые уже и забыли, что можно как-то по-другому и не обязательно тесты писать на всякие примитивные действия.Всё имеет свои преимущества, недостатки и применимость в отдельных случаях. Важно иметь собственное мнение и уметь применять всё по назначению.

- В TDD интерфейсы позволяют подменить "боевую" реализацию логики тестовой.
- В WCF интерфейсы позволяют описать контракт сетевой службы на языке C#.

Но если это не требуется, то применение интерфейсов в данном случае лично я считаю лишним усложнением.
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39171744
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11Nardo,

Строчку с endpoint из конфига покажешь?
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39171934
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregLeo11Nardo,

Строчку с endpoint из конфига покажешь?
Код: xml
1.
2.
3.
4.
5.
<endpoint 
  address="" 
  binding="basicHttpBinding"
  bindingConfiguration="BasicHttpBinding_ITestService"
  contract="TestService.ITestService" />
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39171958
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11Nardo,

Теперь ответь себе на вопрос. Как клиент может узнать о IServiceBase?
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39171966
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregLeo11Nardo,

Теперь ответь себе на вопрос. Как клиент может узнать о IServiceBase?Клиент знает или о WSDL-схеме, сгенерированной по иерархии ITestService : IServiceBase , или имеет саму сборку, в которой описаны эти интерфейсы.
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39172027
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,
Алексей КrefregLeo11Nardo,
Теперь ответь себе на вопрос. Как клиент может узнать о IServiceBase?Клиент знает или о WSDL-схеме, сгенерированной по иерархии ITestService : IServiceBase , или имеет саму сборку, в которой описаны эти интерфейсы.Да, но первноачальное условие, что наследственности ITestService : IServiceBase нет...
Клиент ничего не знает о IServiceBase, Потому что в ендпоинте только один контракт.
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39172033
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregАлексей К,
Алексей Кпропущено...
Клиент знает или о WSDL-схеме, сгенерированной по иерархии ITestService : IServiceBase , или имеет саму сборку, в которой описаны эти интерфейсы.Да, но первноачальное условие, что наследственности ITestService : IServiceBase нет...
Клиент ничего не знает о IServiceBase, Потому что в ендпоинте только один контракт.Согласен.
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39172572
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refregLeo11Nardo,

Теперь ответь себе на вопрос. Как клиент может узнать о IServiceBase?
Да, верно. Просто у меня пока ещё многое ускользает от внимания.

Вот, нашёл описание, когда лучше использовать классы, а когда интерфейсы для контрактов.
https://msdn.microsoft.com/en-us/library/ms733070(v=vs.110).aspx
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39172575
Leo11Nardo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11NardorefregLeo11Nardo,

Теперь ответь себе на вопрос. Как клиент может узнать о IServiceBase?
Да, верно. Просто у меня пока ещё многое ускользает от внимания.

Вот, нашёл описание, когда лучше использовать классы, а когда интерфейсы для контрактов.
https://msdn.microsoft.com/en-us/library/ms733070(v=vs.110).aspx
Мне только непонятно, если я использую класс в качестве контракта, то мне этот класс надо обрамлять сразу двумя атрибутами: ServiceContract и ServiceBehavior?
...
Рейтинг: 0 / 0
Непонятно с наследованием интерфейсов и классов
    #39172773
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leo11NardoLeo11Nardoпропущено...

Да, верно. Просто у меня пока ещё многое ускользает от внимания.

Вот, нашёл описание, когда лучше использовать классы, а когда интерфейсы для контрактов.
https://msdn.microsoft.com/en-us/library/ms733070(v=vs.110).aspx
Мне только непонятно, если я использую класс в качестве контракта, то мне этот класс надо обрамлять сразу двумя атрибутами: ServiceContract и ServiceBehavior?Да.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непонятно с наследованием интерфейсов и классов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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