WCF сервис. Создание сервиса, использующего методы Post и Get
Запись от Lenoshka размещена 04.06.2014 в 13:17
Показов 12706
Комментарии 0
|
Итак, постараюсь рассказать, как создать простенький сервис с тремя методами для различных потребностей. Информации на просторах Интернета много, но есть нюансы, с которыми пришлось повозиться. Именно на них я и сделаю акцент в статье. Создание сервиса. Запускаем студию и создаем новый проект WCF Service Applikation с красивым и понятным названием. После нажатия кнопки ОК откроется сам проект уже с шаблоном. Можно его удалить, т.к. я все буду делать по-другому. Методы сервиса описываются в интерфейсе, а уже их реализация описывается в программе. Чтобы описать наши методы (их будет 3), нужно открыть файл IService1.cs. Файлы, конечно же, лучше переименовать с учетом целей вашего проекта. Создавать будем 3 метода EchoGet — принимает данные методом get (т.е. данные для вносятся в строку uri) EchoPost — принимает данные методом post (тоже через строку uri) EchoPostStream — принимает данные методом post, но уже затолканные через входящий поток. Код объявления методов выглядит следующим образом:
[OperationContract] [WebInvoke(Method="POST", UriTemplate="/{value}")] string EchoPost(string value);
Собственно, пока все. Можно начинать описывать реализацию. В описании ничего замысловатого нет: приняли строку/поток и вернули строку.
Итак, запускаем наш сервис. Первые два метода можно протестировать прямо в студии. Для этого имеется специальный WCF Test Client. Выбираете метод в левой части экрана, пишите входящее значение в столбце Value, нажимаете кнопку Invoke и получаете результат деятельности сервиса в нижней части окна (pic1). Есть один нюанс: он откроется только если нажать кнопку Run при активной вкладке с реализацией методов — Service1.svc.cs. В противном случае откроется браузер с информацией о сервисе. (pic2) Но методы работать в сети не будут. Все дело в том, что нужно описать конечную точку, т.е. куда методы будут отправлять результат своей работы. Наш конфиг выглядит так:
Если мы укажем другие значения привязки, мы не сможем работать с фиддлером и браузером, но указав эту привязку, мы не сможем тестировать сервис через тест-клиент студии. Итак, сервис запущен. Нужно узнать, через какой порт он получает информацию. Для этого обратимся к окну браузера, которое открывается при запуске: в адресной строке пишется адрес с номером порта. http://localhost:22493/Service1.svc Теперь можно проверить жизнеспособность методов. Метод, передающий запрос с помощью метода get можно протестировать в браузере, введя в адресную строку следующее: http://localhost:22493/Service... alue=Hello! Первое, что идет за именем сервиса (Service1.svc) — косая черта, за ней — имя вызываемого метода (EchoGet). Знак вопроса после него говорит, что дальше будут идти переменные: value — имя переменной, Hello — ее значение. Вот какой результат получился (pic3) В фиддлере это выглядит т.о.(pic4) В правой части: в адресной строке запрос к нашему методу с указанием переменной и ее значения. В левой части: результат работы. Значение результата 200 говорит о том, что все прошло хорошо и наш сервис нам что-то вернул. Двойной щелчок по строке с результатом откроет нам следующее окно: (pic5) Результат в нижней части. Следующие методы в браузере уже не протестируем, поэтому обращаемся к Фиддлеру. Метод EchoPost получает данные также через адресную строку. Мы даже объявили шаблон для того, чтобы метод знал, где эти данные искать:
Да, в этом подвох: имя метода в этом случае не указывается.(pic6) Результат можно увидеть опять же, с помощью двойного щелчка по строке с результатом в правой части: (pic7) Остался третий и самый подлый метод. Почему подлый? Да отнял у меня не один день жизни, пока я поняла, что он от меня хочет. Вызвать его можно указав в адресной строке после имени сервиса имя метода, а в нижней части текст сообщения, которое пойдет в поток (pic8) Результат (pic9) С какими трудностями столкнулась я: иногда нужно указать тип входящего контента. Это делается так: в окне request Header пишется следующая строка: Content-Type: application/xml По крайней мере так советуют многое специалисты в своих блогах. НО! Именно в моем случае тип был application/octet-stream Если тип указан не верно, то будет ошибка 400. Теперь о том, как узнать тип. Придумала не сама, а наткнулась в сети вот здесь: https://vivekcek.wordpress.com... /#comments Если кто-нибудь увидит в статье недочеты — пишите. Я же только учусь
| |||||||||||||||||||||||||||||||||||||||||||||
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии


