2012-03-13 1 views
4

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

Я ранее писал некоторые службы 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 для поддержки следующих:

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

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

ответ

6

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

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

И как вы сделаете запрос? http: // localhost: port/Service/Update/1? Я спрашиваю, потому что я просто попробовал с вами предложение, и я могу только добраться до службы по адресу http: // localhost: port/Service1.svc, а не с помощью/Service/Update/1 –

+0

Для клиента SOAP URL-адрес localhost: порт/Service.svc/soap. Для REST один это localhost: port/Service.svc/rest/Update/1. Мой ответ о том, как можно минимально настроить две конечные точки. Если вам нужен этот точный URL-адрес, необходима дополнительная настройка. –

+0

Мне нужно настроить службы, расположенные на двух разных URL-адресах: http://domain.com/Service и http://domain.com/AuthService –

0

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

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

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