Где настроить службу WCF (REST и SOAP)

Я реализую веб-службу WCF, отвечающую за публикацию данных через REST и SOAP с использованием нескольких привязок. Служба должна быть размещена на IIS.

Ранее я писал некоторые службы WCF и немного знаю об их настройке с помощью web.config и настройке маршрутов в файлах Global.asax, однако я не понимаю, как сделать наиболее «чистую» конфигурацию или передовую практику. при настройке службы WCF.

Вот что я понял до сих пор:

Web.config можно использовать для настройки привязок, конечных точек, безопасности и т. д. Это необходимо при размещении службы в IIS или настройка может выполняться в IIS?

Используя Global.asax, мы можем настроить маршрутизацию (и многое другое). но это подходящее место для этого?

void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.Add(new ServiceRoute("Service", new WebServiceHostFactory(), typeof(Service)));
    }

Я потратил некоторое время на гугление этой темы, и кажется, что у каждой ссылки есть свое мнение о том, как выполнить задачу.

Поэтому я хотел бы получить информацию о том, как настроить/внедрить службу WCF для поддержки следующего:

  • Публикация данных через REST/JSON и
  • Публикация данных через SOAP/XML и публикация метаданных
  • Предоставлять различные услуги; http://domain.com/Service и http://domain.com/AuthService

Для записи я знаю, как публиковать данные, используя как SOAP, так и REST - это не проблема. Я просто пытаюсь сделать максимально чистую/минимальную конфигурацию для службы.

Любая обратная связь очень ценится.


person Nicklas Møller Jepsen    schedule 13.03.2012    source источник


Ответы (2)


Вот как я это сделал.

Web.config:

<system.serviceModel>
    <services>
        <service name="Service">
            <endpoint address="soap" contract="IService" binding="basicHttpBinding"/>
            <endpoint address="rest" contract="IService" binding="webHttpBinding" behaviorConfiguration="restBehavior"/>
        </service>
    </services>
    <behaviors>
        <endpointBehaviors>
            <behavior name="restBehavior">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
      <serviceBehaviors>
        <behavior>
            <serviceMetadata httpGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>  

Контракт выглядит так:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(UriTemplate="/Update/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    void Update(string id, Entity entity);
}
person Dmitriy Melnik    schedule 13.03.2012
comment
И как бы вы сделали запрос? localhost:port/Service/Update/1 ? Я спрашиваю, потому что я только что попробовал ваше предложение, и я могу связаться со службой только по адресу localhost:port/ Service1.svc, а не с помощью /Service/Update/1 - person Nicklas Møller Jepsen; 13.03.2012
comment
Для клиента SOAP используется URL-адрес localhost:port/Service.svc/soap. Для REST это localhost:port/Service.svc/rest/Update/1. Мой ответ о том, как можно минимально настроить две конечные точки. Если вам нужен именно этот URL-адрес, потребуется дополнительная настройка. - person Dmitriy Melnik; 13.03.2012
comment
Мне нужно иметь возможность настроить службы, расположенные на двух разных URL-адресах: domain.com/Service и domain.com/AuthService - person Nicklas Møller Jepsen; 13.03.2012
comment
Я частично использовал ваше предложение, поэтому принимаю его как ответ. - person Nicklas Møller Jepsen; 17.03.2012

С .net 4.5 вы можете вообще опустить любую конфигурацию в файле .config. [ServiceContract], [OperationContract], [DataContract] будут необходимы. В документации об этом не говорят явно, но это работает :)

«.NET Framework 4.5 упрощает настройку службы WCF, удаляя требование для элемента service. Если вы не добавите раздел service или не добавите какие-либо конечные точки в >service и ваша служба программно не определяет никаких конечных точек, то к вашей службе автоматически добавляется набор конечных точек по умолчанию, по одной для каждого базового адреса службы и для каждого контракта, реализуемого вашей службой». - от

https://msdn.microsoft.com/en-us/library/ee358768%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

person Konstantin Salavatov    schedule 16.03.2015