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

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

12.04.2016, 21:07. Показов 3846. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2016, 21:07
Ответы с готовыми решениями:

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

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

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

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

5
Эксперт .NET
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 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
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 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
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2016, 18:04
Помогаю со студенческими работами здесь

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

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

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

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


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

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