Где настроить службу WCF (REST и SOAP) - PullRequest
4 голосов
/ 13 марта 2012

Я внедряю веб-службу 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 - это не проблема. Я просто пытаюсь сделать максимально чистую / минимальную конфигурацию для сервиса.

Любая обратная связь с благодарностью.

Ответы [ 2 ]

6 голосов
/ 13 марта 2012

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

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);
}
0 голосов
/ 16 марта 2015

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

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

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

...