Запуск методов WCF из браузера

Я создаю очень простой сервис WCF с С# в Visual Studio 2010. Я хочу знать, могу ли я запускать свои методы непосредственно из браузера, набрав что-то вроде: //localhost:49815/Service1.svc/methodName(parameterValue)?

Вот суть моего кода.

Интерфейс:

using ...
namespace WcfService1{   
    [ServiceContract]
    public interface IService1{
        [OperationContract]
        [WebGet]
        string echoWithGet(string s);
        [OperationContract]
        [WebInvoke]
        string echoWithPost(string s);
    }
}

Методы:

 public string echoWithGet(string s ){
            return "Get: "+s;
        }

 public string echoWithPost(string s){
            return "Post: " + s;
        }

Ответ 1

Да, вы можете вызвать эти методы в браузере, если ваша служба настроена правильно, хотя у вас неправильный синтаксис URL.

Чтобы вызвать методы WCF из браузера, вам нужно сделать две вещи:

  • Используйте [WebGet] и [WebInvoke] атрибуты ваших методов, которые вы выполнили.
  • Используйте webHttpBinding для конечной точки вашей службы и включите поведение webHttp. См. http://weblogs.asp.net/kiyoshi/archive/2008/10/08/wcf-using-webhttpbinding-for-rest-services.aspx для примера конфигурации, но соответствующие части:

     <service> 
        <endpoint behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="MyServiceContract" /> 
    </service> 
    
    <endpointBehaviors> 
        <behavior name="webBehavior"> 
            <webHttp /> 
        </behavior> 
    </endpointBehaviors> 
    

Как только это будет сделано, WCF начнет прослушивать URL-запрос и перенаправить их на соответствующие веб-методы. Вы можете настроить шаблоны URL-адресов в своих атрибутах WebGet или WebPost, которые отображают сегменты URL-адресов для параметров метода, если вы хотите сделать ваши URL-адреса "чистыми", но это необязательно. В противном случае вы передаете параметры так же, как вы передаете параметр на любой другой URL-адрес, используя разделитель параметров:

http://localhost:49815/MyService.svc/methodName?parameterName=value

Обратите внимание, что по умолчанию для метода, вызванного веб, является POST. Технически вы можете сделать это через браузер, но это намного сложнее (вам нужно создать локальную HTML-форму или использовать консоль Javascript или что-то подобное), но методы WebGet можно вызвать, просто запросив правильный URL-адрес.

Кроме того, если ваши методы возвращают что-либо более сложное, чем строка, WCF попытается сериализовать его как JSON; вам может понадобиться "просмотреть источник" на полученной странице, чтобы увидеть его.

Ответ 2

Это не отвечает на ваш вопрос, но это сделает вашу жизнь намного легче сделать ваш сервис RESTful (или REST-like). Хотя вы можете сделать это с помощью WCF, я настоятельно рекомендую взглянуть на ASP.NET Web API.

Существуют также другие альтернативы для создания служб RESTful, таких как Nancy или ServiceStack.

Ответ 4

Прямой ответ. Для методов GET вы можете использовать браузер для просмотра результата. Для методов POST вы не можете использовать браузер, если вы прямо вставляете свой url для метода post. Для достижения POST вы можете либо создать ФОРМУ HTML, либо использовать FIDDLER, чтобы увидеть результат.