Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 12
1

Переключение между MVC сервисами в ASP.NET приложении

09.07.2015, 17:41. Показов 1658. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый. Есть ASP.NET приложение и два MVC сервиса, реализующих один контракт. Хочется в зависимости от контекста использовать ту или иную реализацию в ASP приложении. Не подскажете, как это лучше сделать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2015, 17:41
Ответы с готовыми решениями:

ASP.NET MVC 4,ASP.NET MVC 4.5 и ASP.NET MVC 5 большая ли разница между ними?
Начал во всю осваивать технологию,теперь хочу с книжкой посидеть и вдумчиво перебрать всё то что...

Видеочат в asp.net mvc приложении
Всем привет! Подскажите, пожалуйста: 1. Написание видеочата - на сколько это сложная задача и...

SerializationException в ASP.NET MVC приложении при десериализации
Добрый день. Делаю небольшое приложение ASP.NET MVC для просмотра погоды. Данные берутся с сайта...

Как создать отчет в веб приложении Asp.net mvc 4?
Использовать ReportViewer или как то иначе?

15
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
09.07.2015, 20:37 2
А в чем проблема ? , используйте. - для клиента всеравно на какой платформе реализованы сервисы.
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
09.07.2015, 22:05 3
Цитата Сообщение от beetlewar Посмотреть сообщение
Не подскажете, как это лучше сделать?
наверное с помощью условного выражения
C#
1
2
3
4
5
6
7
8
if(условие)
{
     один сервис
} 
else 
{
   другой сервис
}
0
653 / 589 / 171
Регистрация: 17.07.2012
Сообщений: 1,670
Записей в блоге: 1
10.07.2015, 06:18 4
Цитата Сообщение от beetlewar Посмотреть сообщение
в зависимости от контекста
Смотря от какого контекста.

Лучше это сделать через DI/IoC, а в зависимости от контекста, резолвить зависимости, хоть условным оператором.
0
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 12
10.07.2015, 12:57  [ТС] 5
Цитата Сообщение от Eugene22 Посмотреть сообщение
Код C#Выделить код
1
2
3
4
5
6
7
8
if(условие)
{
* * *один сервис
}
else
{
* *другой сервис
}
Теперь детали Я подключаю в проект MVC как ServiceReference. В результате добавления 2х ссылок создаются 2 прокси к сервисе. Я так понимаю, через них и нужно общаться. Но вся соль в том, чтоб оба прокси реализуют разные интерфейсы и я не могу пользоваться ими, как общей абстракцией.

Цитата Сообщение от Cupko Посмотреть сообщение
Смотря от какого контекста.
Лучше это сделать через DI/IoC, а в зависимости от контекста, резолвить зависимости, хоть условным оператором.
По поводу контекста - скорее всего, я буду использовать в Debug одно, в Release - другое. Возможно, будет настройка в web.config, кого использовать или даже в файле со своими настройками, пока не решил. Но это ведь только влияет на инициализацию. А после инита хотелось бы работать с абстракцией, которая смотрела бы на тот или иной объект.
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
10.07.2015, 13:14 6
https://ru.wikipedia.org/wiki/... ктирования)
0
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 12
10.07.2015, 13:31  [ТС] 7
Т.е. вы предлагаете сделать фасад, в котором if-ами в зависимости от контекста использовать тот или иной объект? А более прогрессивного способа нет, ведь у меня оба сервиса происходят от одного контракта?
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
10.07.2015, 13:43 8
beetlewar, не, тут дело в том, что фасад позволит создать систему и делегировать выполнение запроса нужному сервису, как общее решение вполне подойдет
0
653 / 589 / 171
Регистрация: 17.07.2012
Сообщений: 1,670
Записей в блоге: 1
10.07.2015, 13:44 9
beetlewar, я ж вам предлагал использовать DI/IoC. Создать 2 объекта, которые будут разные сервисы возвращать, унаследовать от интерфейса, и резолвить зависимость IoC-контейнером.
0
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 12
10.07.2015, 14:24  [ТС] 10
Цитата Сообщение от Cupko Посмотреть сообщение
beetlewar, я ж вам предлагал использовать DI/IoC. Создать 2 объекта, которые будут разные сервисы возвращать, унаследовать от интерфейса, и резолвить зависимость IoC-контейнером.
Мне просто эта кажется странным. У меня уже есть интерфейс (контракт) сервиса, зачем мне создавать еще один?
0
653 / 589 / 171
Регистрация: 17.07.2012
Сообщений: 1,670
Записей в блоге: 1
10.07.2015, 14:29 11
beetlewar, если не нужно - не создавайте, я немного далек от WCF-сервисов. Просто выше вы написали, что у вас разные абстракции, а здесь - что интерфейс один.
0
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 12
10.07.2015, 14:41  [ТС] 12
Cupko, разные абстракции мне генерит framework. Хотелось бы как-то это обойти. Наверное, в итоге вопрос сводится к тому, как это сделать. Тут мне видится 2 варианта. 1 - это заставить среду генерить одну абстракцию для обеих реализаций (что скорее всего невозможно). 2 - это забить на генерацию прокси и вручную создавать соединение с сервисом. На счет 2 - пока не знаю, как это сделать, т.к. опыта работы с веб сервисами нет.
0
653 / 589 / 171
Регистрация: 17.07.2012
Сообщений: 1,670
Записей в блоге: 1
10.07.2015, 15:21 13
beetlewar,
Ребята пишут, что для этого обычно используют ChannelFactory. Поглядите примеры. Всяко лучше чем писать свои костыли.
1
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 12
10.07.2015, 15:26  [ТС] 14
Cupko, спасибо, посмотрю. Именно велосипедов и не хочется.
0
burning1ife
1462 / 1284 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
10.07.2015, 16:49 15
Лучший ответ Сообщение было отмечено Metall_Version как решение

Решение

Я в свое время тоже сталкивался с такой задачей, когда надо было подключать несколько одинаковых WCF.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            var myBinding = new BasicHttpBinding();
            var myEndpoint = new EndpointAddress(url_сервиса);
            var myChannelFactory = new ChannelFactory<IService1>(myBinding, myEndpoint);
 
            IService1 client = null;
            Data result;//Возвращаемые сервисом данные
            try
            {
                client = myChannelFactory.CreateChannel();
                result = client.GetData();//получение данных
 
                ((ICommunicationObject)client).Close();
            }
            catch
            {
                if (client != null)
                {
                    ((ICommunicationObject)client).Abort();
                }
            }
Добавлено через 3 минуты
Я просто передавал в метод Url адрес сервиса и получал с него необходимые данные. Прокси класс был сгенерирован, единственное отличие в том, что настройки по подкл. я брал не из web.config, а задавая вручную.
1
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 12
10.07.2015, 19:24  [ТС] 16
Ну да, через ChannelFactory заработало. Спасибо всем.
0
10.07.2015, 19:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2015, 19:24
Помогаю со студенческими работами здесь

Связь 1 к многим в приложении Entity Framework ASP.NET MVC 5
Пишу веб-приложения и нужно сделать связь 1 к многим, но это поле может быть не заполнение. И тут и...

Работа с сервисами в ASP.NET
В примере проекта на ASP есть написаний сервис, который отвечает не запросы клиента. Как со...

Стоит ли изучать asp.net mvc 4 из за скорого выхода asn.net mvc vNext ?
Доброго вечера! Как я узнал, Microsoft скоро планирует выпустить новый веб-фреймворк с названием...

Asp.Net MVC 4 Web Application "Ошибка сервера в приложении '/'."
Здравствуйте! Пожалуйста подскажите, почему при запуске Asp.Net MVC 4 Web Application происходит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru