Здравствуйте! Сегодня: Сб, 21 Сен 2019, Ваш IP: 3.226.243.130 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Web-программирование
+ Создать новую тему Страница: 1
Тема: Как вызывать методы службы WCF в браузере · +  +  дата добавления: 07.01.2015 / 03:01
Автор темы:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


Здравствуйте.

Если я открою файл WebService-службы в браузере, я получаю список ссылок на методы этой службы, и, таким образом, я могу перейти к любому из них и обращаться к нему из браузера:



Но если же я открою WCF-службу в браузере, открывается аналогичная страница, но подобного списка не вижу.

Скажите, пожалуйста,

1) можно ли получить аналогичный список методов WCF-службы в браузере;
2) как можно вызывать методы WCF-службы в браузере?
Технологии: .NET Framework, Windows Communication Foundation (WCF)
 
Ответ # 1 # · +  +  дата добавления: 07.01.2015 / 12:08
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Добавить атрибут WebGet для GET-запросов и WebInvoke для POST.

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet]
    string EchoWithGet(string s);

    [OperationContract]
    [WebInvoke]
    string EchoWithPost(string s);
}
http://msdn.microsoft.com/ru-ru/library/bb412178.aspx

Вот в этой статье подробно показано:
http://msdn.microsoft.com/en-us/magazine/dd315413.aspx

Важно конфигурацию правильно провести:
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="Default" name="WcfService1.Service1">
        <endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="WcfService1.IService1" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:38460/Service1.svc" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="Default">
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
Заменить http://localhost:38460/Service1.svc на свой адрес службы.
WcfService1.Service1 - класс службы
WcfService1.IService1 - интерфейс.
Остальные параметры можно не трогать.

Вызов в браузере:
http://localhost:38460/Service1.svc/Метод?параметр=значение&параметр2=значение&...&параметрN=значение
Например:
http://localhost:38460/Service1.svc/GetData?value=1
 
Ответ # 2 # · +  +  дата добавления: 08.01.2015 / 03:25
Автор ответа:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


Спасибо, заработало, но только когда я запускаю службу непосредственно из студии.

Когда же я развернул службу в IIS (да, мне, кстати, два дня назад удалось разобраться с ошибкой развертывания WCF-службы в IIS, о которой я писал ранее!), она работает, появляется страница самой службы, работает, когда я к ней обращаюсь из клиентских приложений, но когда я обращаюсь к методу развернутой службы в браузере, в IE появляется ошибка 404 "Не удается найти веб-страницу", а в хроме - просто чистая страница.

Такое вот странное поведение.
 
Ответ # 3 # · +  +  дата добавления: 08.01.2015 / 11:09
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Значит конфигурация неправильная.

Адрес нужно указывать тот, который используется в IIS:
<add baseAddress="http://localhost:38460/Service1.svc" />
 
Ответ # 4 # · +  +  дата добавления: 08.01.2015 / 17:26
Автор ответа:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


И порт тоже должен быть такой же, какой установлен в IIS?
 
Ответ # 5 # · +  +  дата добавления: 08.01.2015 / 18:13
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Да, должен быть полный адрес службы, по которому она доступна.
 
Ответ # 6 # · +  +  дата добавления: 08.01.2015 / 19:03
Автор ответа:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


Выставил - то же самое.
 
Ответ # 7 # · +  +  дата добавления: 08.01.2015 / 20:12
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Возможно с маршрутами проблема.

Можно попробовать добавить исключение для svc:
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");

Но вообще причин может быть множество
 
Ответ # 8 # · +  +  дата добавления: 09.01.2015 / 17:18
Автор ответа:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


У меня не MVC приложение, а WebForms.
 
Ответ # 9 # · +  +  дата добавления: 09.01.2015 / 17:51
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


В WebForms, в зависимости от версии, тоже есть. Какая версия .NET Framework?

Если веб-формы старые, то в IIS придется настраивать.
 
Ответ # 10 # · +  +  дата добавления: 09.01.2015 / 22:13
Автор ответа:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


.NET Framework 4.5

И, кстати, когда я назначил сайту в IIS порт такой же, как в проекте, у меня возник сбой загрузки:



Про эту ошибку, я кстати, писал в теме про проблему развертывания службы WCF в IIS.
 
Ответ # 11 # · +  +  дата добавления: 10.01.2015 / 02:50
Автор ответа:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


Когда у меня служба, будучи опубликованной в IIS, вообще не работала.
 
Ответ # 12 # · +  +  дата добавления: 10.01.2015 / 05:53
Автор ответа:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


Вот еще, если поможет, содержимое вкладки Network в Средстве разработчика:



В консоли браузера все чисто.
 
Ответ # 13 # · +  +  дата добавления: 10.01.2015 / 12:00
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


.NET Framework 4.5
Должна быть возможность настраивать маршруты таким же способом, как в MVC. Они и там и там одинаковые.
Если проект создавался по шаблону, то маршруты должны быть в файле /App_Start/RouteConfig.cs

Если нет, то в Global.asax:
void Application_Start(object sender, EventArgs e)
{
  var routes = RouteTable.Routes;
  routes.Ignore("{resource}.svc/{*pathInfo}");
}
И, кстати, когда я назначил сайту в IIS порт такой же, как в проекте, у меня возник сбой загрузки
Это нормально. Нельзя так делать.
Про эту ошибку, я кстати, писал в теме про проблему развертывания службы WCF в IIS.
Где я, если не изменяет память, говорил, почему нельзя использовать сервер для разработки и отладки.
 
Ответ # 14 # · +  +  дата добавления: 10.01.2015 / 12:05
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


По ошибке 400:
<serviceMetadata httpGetEnabled="true" />
true точно стоит?
 
Ответ # 15 # · +  +  дата добавления: 10.01.2015 / 17:53
Автор ответа:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


По ошибке 400:
<serviceMetadata httpGetEnabled="true" />
true точно стоит?

Да, точно, я скопипастил приведенную вами конфигурацию и изменил имя класса службы и контракта и поставил свой номер порта.
Где я, если не изменяет память, говорил, почему нельзя использовать сервер для разработки и отладки.

Да, я помню, но у меня сейчас доступа к тому серверу, где я раньше делал, нет, делаю все на своей локальной машине.
 
Ответ # 16 # · +  +  дата добавления: 10.01.2015 / 18:03
Автор ответа:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


Должна быть возможность настраивать маршруты таким же способом, как в MVC. Они и там и там одинаковые.
Если проект создавался по шаблону, то маршруты должны быть в файле /App_Start/RouteConfig.cs

Если нет, то в Global.asax:

...

У меня не совсем тот шаблон, у меня веб-приложение как сопутствующее к приложению Silverlight, там этого файла нет.
 
Ответ # 17 # · +  +  дата добавления: 10.01.2015 / 22:22
Автор ответа:
Michael
Michael
тем: 10 / ответов: 44 / благодарностей: 0 / репутация: 0
ответов: 44
создал(а) тем: 10


Да, и вот что еще более интересно. Я сейчас перенес свой проект на машину с Windows 7 и с 7-м IIS-ом, у меня проект (с вашей конфигурацией) начал падать с исключением:



Зато обращение к методам службы по Url стало работать! :)
 
Страница: 1 + Создать новую тему