Несколько Привязок на Сервисе WCF - PullRequest
0 голосов
/ 03 декабря 2011

Я хочу разместить службу WCF 4.0 в IIS 7.5 и иметь возможность привязки к ней с помощью basicHttpBinding, а также RESTful с webHttpBinding.

Мне нужно иметь доступ к нему, вот так:

http://server/wcf/service/method/parameters (ОТДЫХ)

а также так:

http://server/wcf/service.svc (базовый HTTP)

Пока у меня есть это для моего Web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="json">
          <webHttp defaultOutgoingResponseFormat="Json" helpEnabled="true" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="SAIF.Services.WCF.Services.CustomerContactService">
        <endpoint address="CustomerContact" behaviorConfiguration="json" binding="webHttpBinding" contract="SAIF.Services.WCF.Contracts.ICustomerContactService" />
        <endpoint address="CustomerContact.svc" binding="basicHttpBinding" contract="SAIF.Services.WCF.Contracts.ICustomerContactService" />
      </service>
      <service name="SAIF.Services.WCF.Services.OnlineLoginService">
        <endpoint address="OnlineLogin" binding="basicHttpBinding" contract="SAIF.Services.WCF.Contracts.IOnlineLoginService" />
      </service>
    </services>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
      <serviceActivations>
        <add relativeAddress="CustomerContact.svc" service="SAIF.Services.WCF.Services.CustomerContactService" />
      </serviceActivations>
    </serviceHostingEnvironment>
  </system.serviceModel>
</configuration>

У меня также есть это в моем файле global.asax для расширения без активации:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' Fires when the application is started
        Routing.RouteTable.Routes.Add(New ServiceRoute("CustomerContact", New ServiceHostFactory, GetType(SAIF.Services.WCF.Services.CustomerContactService)))
        Routing.RouteTable.Routes.Add(New ServiceRoute("OnlineLogin", New ServiceHostFactory, GetType(SAIF.Services.WCF.Services.OnlineLoginService)))
    End Sub

Я украсил службу этим:

И мой сервисный интерфейс с UriTemplates

Похоже, что вы не можете получить к ним доступ как с RESTful, так и через SOAP.

Спасибо! Sam

1 Ответ

2 голосов
/ 08 декабря 2011

Просто украсьте свой метод с помощью атрибутов OperationContract и WebGet. Теперь добавьте следующее к элементу system.serviceModel на своих серверах web.config

    <standardEndpoints>
          <webHttpEndpoint>
            <!-- 
                Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
                via the attributes on the <standardEndpoint> element below
            -->
            <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true">
              <readerQuotas maxStringContentLength="5242880" maxArrayLength="16384" maxBytesPerRead="4096" />
            </standardEndpoint>
          </webHttpEndpoint>
        </standardEndpoints>

ПРИМЕЧАНИЕ: Йо Вы можете удалить конечную точку json из вышеперечисленного (как мы бы достигли четкой концепции URL с помощью нового REST Api), и в вашем global.asax просто замените следующее:

Routing.RouteTable.Routes.Add(New ServiceRoute("CustomerContactService", New WebServiceHostFactory, typeof(SAIF.Services.WCF.Services.CustomerContactService)));

Теперь, как только вы сделаете вышеописанное, вы сможете получить доступ к одной и той же службе через SOAP и REST, и URL-адреса будут такими:

SOAP -> http://localhost/virtualdirectoryname/CustomerContactService.svc

ОТДЫХ -> http://localhost/virtualdirectoryname/CustomerContactService/method/parameters

Теперь перейдите к своей службе в IE, и вы должны увидеть сервер SOAP, когда вы переходите к файлу .svc, а когда вы переходите к остальному URL, вы должны увидеть, что в браузере должен быть загружен файл XML, содержащий ответ в формате json.

...