С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы и WCF
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 1
Регистрация: 25.02.2014
Сообщений: 29
1

Запуск WCF сервиса

12.04.2016, 21:07. Показов 3860. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Помогите, если не сложно. 4 день бьюсь уже, не понимаю, в чём проблема.

Пытаюсь создать WCF сервис.

Интерфейс сервиса
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
29
30
31
32
33
34
35
36
37
[ServiceContract]
    public interface ICustomerService
    {
        [OperationContract]
        [WebInvoke(Method = "GET",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/GetAllCustomer/")]
        List<Customer> GetAllCustomer();
 
        [OperationContract]
        [WebGet(RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/GetCustomerDetails/{id}")]
        Customer GetCustomerDetails(string id);
 
        [OperationContract]
        [WebInvoke(Method = "POST",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/AddNewCustomer")]
        bool AddNewCustomer(Customer customer);
 
        [OperationContract]
        [WebInvoke(Method = "PUT",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "/UpdateCustomer")]
        void UpdateCustomer(Customer customer);
 
        [OperationContract]
        [WebInvoke(Method = "DELETE",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "DeleteCustomer/{id}")]
        void DeleteCustomer(string id);
    }
Реализация

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class CustomerService : ICustomerService
    {
        private readonly DAO _dao;
 
        public CustomerService()
        {
            _dao = DAO.GetDAO();
        }
 
        public List<Customer> GetAllCustomer()
        {
            return _dao.GetObjects<Customer>().ToList();
        }
 
        public Customer GetCustomerDetails(string id)
        {
            try
            {
                return _dao.GetObjects<Customer>(Int32.Parse(id));
            }
            catch (Exception ex)
            {
                throw new FaultException<string>
                        (ex.Message);
            }
            
        }
 
        public bool AddNewCustomer(Customer customer)
        {
            try
            {
                _dao.SaveOrUpdateObject(customer);
            }
            catch (Exception ex)
            {
                throw new FaultException<string>
                        (ex.Message);
            }
            return true;
        }
 
        public void UpdateCustomer(Customer customer)
        {
            try
            {
                _dao.SaveOrUpdateObject(customer);
            }
            catch (Exception ex)
            {
                throw new FaultException<string>
                        (ex.Message);
            }
        }
 
        public void DeleteCustomer(string id)
        {
            try
            {
                var obj = _dao.GetObjects<Customer>(Int32.Parse(id));
                _dao.DeleteObject(obj);
            }
            catch (Exception ex)
            {
                throw new FaultException<string>
                        (ex.Message);
            }
        }
    }
Конфиг

XML
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
29
30
31
32
33
34
35
36
<?xml version="1.0" encoding="utf-8"?>
<configuration>
 
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!--Чтобы избежать раскрытия метаданных, до развертывания задайте следующим параметрам значение "false". -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- Чтобы при сбое получать подробные сведения об исключении для целей отладки, установите для нижеприведенного параметра значение true.  Перед развертыванием установите значение false, чтобы избежать раскрытия информации об исключении -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="webHttpBinding" scheme="http" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        Для просмотра корневого каталога веб-приложения во время отладки установите значение true.
        Перед развертыванием установите значение false, чтобы избежать раскрытия сведений в папке веб-приложения.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
 
</configuration>
Сервис стартует. Показывает мне страницу http://localhost:47894/CustomerService.svc с текстом, что всё норм, но для сервиса нужен клиент.
Но при переходе на любой из методов (тестировал на GetAllCustomer, ибо самый простой) выходит ошибка 500
Сообщение с Кому "http://localhost:47894/CustomerService.svc/GetAllCustomer/" не может быть обработано на стороне получателя из-за несоответствия AddressFilter на EndpointDispatcher. Проверьте согласованность адресов EndpointAddress на стороне отправителя и получателя.

Что я делаю не так?
0
Programming
Эксперт
9485 / 562 / 19
Регистрация: 12.04.2006
Сообщений: 11,671
Блог
12.04.2016, 21:07
Ответы с готовыми решениями:

Вызов WCF сервиса
Добрый день. Скажу сражу что сервисы я начал изучать недавно Передо мной такая задача. в...

Пример WCF сервиса
Всем привет! Гуглил но не нашел скажем так &quot;нормального примера&quot; WCF сервиса. Все примеры простые...

Хостинг WCF сервиса
Был WCF-сервис, который хостился на консольном приложении, у этого консольного приложения были свои...

Конфигурация WCF сервиса
Добрый день. Подскажите, пожалуйста, как правильно конфигурировать WCF сервис. У меня было...

5
Эксперт .NET
5546 / 4309 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
13.04.2016, 08:53 2
Цитата Сообщение от Oriaraniar Посмотреть сообщение
Пытаюсь создать WCF сервис.
Вы забыли указать, что у вас REST сервис. И не привели определение контрактов данных. Кстати говоря, я точно не помню, работают ли сервисы такого типа с ними. Возможно, что и нет, и тогда вам придется использовать только примитивные типы. Попробуйте для проверки, уберите из службы использование контрактов данных и оставьте только простые типы (int, string).
0
0 / 0 / 1
Регистрация: 25.02.2014
Сообщений: 29
13.04.2016, 09:10  [ТС] 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[DataContract]
    public class Customer
    {
        [DataMember]
        public virtual int Id { get; set; }
        [DataMember]
        public virtual int Week { get; set; }
        // ReSharper disable once InconsistentNaming
        [DataMember]
        public virtual string FIO { get; set; }
        [DataMember]
        public virtual bool? IsWiner { get; set; }
        [DataMember]
        public virtual DateTime? DateRegister { get; set; }
        [DataMember]
        public virtual int CountPoint { get; set; }
    }
Убрать сложные типы - это вы List имеете в виду? Но мне необходимо возвращать лист.
Если не REST, то как именно его лучше запустить? Я перепробовал уже кучу вариантов с примерами. И всегда получал 500 ошибку.
Если использовать basicHttpBinding биндинг, то в отладчике студии сервис работает корректно. Но мне нужен доступ к сервису из javascript. Еще лучше, если это будет Angular.

Пример данный писал на основании http://www.c-sharpcorner.com/U... -services/ , заменив связь с СУБД с entity framework на NHibernate. В примере данном есть контракты данных.
0
Эксперт .NET
5546 / 4309 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
13.04.2016, 09:51 4
Цитата Сообщение от Oriaraniar Посмотреть сообщение
Убрать сложные типы - это вы List имеете в виду?
Нет, а параметр типа Т сделать к-либо простым типом. Для проверки, не более того.
Цитата Сообщение от Oriaraniar Посмотреть сообщение
Если не REST, то как именно его лучше запустить?
Тут ничего не скажу, я же ваших задач не знаю. Простой сервис, основанный на SOAP не подойдет?
0
0 / 0 / 1
Регистрация: 25.02.2014
Сообщений: 29
13.04.2016, 10:05  [ТС] 5
Задача проста. Научиться пользоваться WCF в рамках веб модели.
Чтобы сервис был запущен на сервере и ангулар имел к нему доступ и мог вызывать его методы посредством вот такого типа запросов "http://localhost:47894/CustomerService.svc/GetAllCustomer/".
Получать данные в зависимости от параметров, выбранных на странице. И возвращать листы сложных типов (аналогичных вышеприведенному)

Если есть хороший пример SOAP сервиса, выполняющего данный функционал, и описание, как его связать с ангуларом, буду благодарен. Просто исходя из того, что я нашел, вышеуказанный пример был наиболее полно расписан.
0
Эксперт .NET
5546 / 4309 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
13.04.2016, 18:04 6
Цитата Сообщение от Oriaraniar Посмотреть сообщение
Научиться пользоваться WCF в рамках веб модели.
Попробуйте для начала почитать первоисточник.
https://msdn.microsoft.com/ru-... .110).aspx

Добавлено через 7 часов 45 минут
Цитата Сообщение от Oriaraniar Посмотреть сообщение
описание, как его связать с ангуларом
Тут вроде есть примеры.
1
13.04.2016, 18:04
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
13.04.2016, 18:04
Помогаю со студенческими работами здесь

Создание многопользовательского WCF-сервиса
Задание предполагает реализацию простого многопользовательского WCF-сервиса с асинхронными...

Создание асинхронного wcf-сервиса
Уважаемые Гуру! Задача такая: 1. На клиенте silverlight приложения должно появляться уведомление...

Размещение WCF сервиса на хостинге
Доброго времени суток. Изучаю WCF. Разработал небольшую службу для обмена сообщения. Сервис...

Доступность метаданных WCF сервиса
Создал проект с двумя севрисами в нем. Создал собственный класс для аутентификации пользователя в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Блоги программистов
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­хронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru