2011-01-16 3 views
1

Я новичок в WCF, поэтому, пожалуйста, несите меня.Как показать конечную точку SOAP с помощью Стартового набора WCF?

Используя самую последнюю версию набора для запуска стартеров WCF, я создал веб-сервис, который вызывается приложением Android. Конечная точка RESTful работает нормально, но я хотел бы создать конечную точку SOAP, чтобы клиент .NET мог использовать ее и генерировать все необходимые классы.

Я по-прежнему использую файл конфигурации по умолчанию, и я немного смущен тем, что мне нужно сделать.

Здесь

<?xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 

    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </modules> 
    </system.webServer> 

    <system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <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"/> 
     </webHttpEndpoint> 
    </standardEndpoints> 
    </system.serviceModel> 

</configuration> 

Я думаю, что нужно добавить следующее где-то в конфигурационном файле, но я не уверен, где он принадлежит, или если я нахожусь на правильном пути.

<endpoint name="mex" address="mex" binding="mexHttpBinding" contract="Service1"/> 
<endpoint name="soap" address="soap" binding="basicHttpBinding" contract="Service1"/> 

У меня только один класс, и это Service1.cs. Я попытался внести некоторые изменения, но я не имел успеха.

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

- Обновление -

После того как я вставил тег услуги, у меня была проблема, получая «Добавить ссылку на службу» функцию для работы в Visual Studio. Я узнал, что «HttpGetEnabled» должен быть правдой, поэтому он будет публиковать метаданные службы в http.

Я добавил это, и это похоже на его работу.

<behaviors> 
      <serviceBehaviors> 
       <behavior name="Service1Behavior"> 
        <serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 

Если я добавляю дополнительные услуги, должен ли я создать еще два конечных точки для этой службы?

Спасибо.

ответ

0

Если вы хотите выставить дополнительные конечные точки на службу, вам нужно добавить те к <service name="...."> тега в вашей конфигурации:

<system.serviceModel> 
    <services> 
    <service name="NameSpace.ServiceClassName> 
     <endpoint name="rest" 
       address="" 
       binding="webHttpBinding" 
       contract="IService1" /> 
     <endpoint name="soap" 
       address="soap" 
       binding="basicHttpBinding" 
       contract="IService1" /> 
     <endpoint name="mex" 
       address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 
    </service> 
    </services> 
</system.serviceModel> 

Вы, очевидно, с помощью WCF 4 стандартных конечных точек воздействия - если вы хотите изменить это, вам нужно будет явно указать всю необходимую вам конфигурацию.

Теперь ваша служба (как это реализовано в ServiceClassName в NameSpace пространстве имен) будет иметь три конечные точки:

  • базовый адрес вашего * SVC-файл будет конечной точкой REST с помощью webHttpBinding
  • (service.svc)/soap адрес будет тем же самым контрактом (те же методы обслуживания), но с использованием SOAP-basicHttpBinding
  • адрес (service.svc)/mex будет иметь служебные метаданные для клиентов SOAP
Смежные вопросы