Что не так с моими конечными точками wcf? - PullRequest
0 голосов
/ 27 июня 2011

Я пытаюсь создать службу wcf с двумя конечными точками, одной SOAP 1.1 и другой SOAP 1.2.Вот мой конфиг:

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

<configSections>
</configSections>
<connectionStrings>
<add name="ProgramInformationWS.Properties.Settings.IMTConnectionString" connectionString="Data Source=DLADD00001;Initial Catalog=IMT;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<compilation debug="true"/>
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's 
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
  <service name="EnterpriseReportingWS.ERPService" behaviorConfiguration="ERPService.Behavior">
      <endpoint address="soap" binding="basicHttpBinding" bindingConfiguration="" contract="EnterpriseReportingWS.IERPService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
      <endpoint address="soap12" binding="wsHttpBinding" bindingConfiguration="" contract="EnterpriseReportingWS.IERPService">
          <identity>
              <dns value="localhost"/>
          </identity>
      </endpoint>         
    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://MyServerHere/ERPService/"/>
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
<serviceBehaviors>
    <behavior name="ERPService.Behavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>

<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>

Что я пытаюсь настроить, так это то, что когда я нажимаю

http://caaditl20bz3.national.edu/ERPService/EnterpriseReportingWS.ERPService.svc/soap

, я получаю SOAP 1.1, а когда я нажимаю

http://caaditl20bz3.national.edu/ERPService/EnterpriseReportingWS.ERPService.svc/soap12

Я получаю SOAP 1.2.Тем не менее, поведение, которое я получаю, заключается в том, что ни один из этих способов не разрешается, и единственный способ получить доступ к своему сервису - это

http://caaditl20bz3.national.edu/ERPService/EnterpriseReportingWS.ERPService.svc

Что я облажался?

ОБНОВЛЕНИЕ: Удалив конечную точку wshttpbinding и используя конечную точку basichttpbinding только в моей конфигурации, я могу получить SOAP 1.1.Что мне нужно сделать, чтобы иметь возможность сделать и то и другое доступным?

1 Ответ

0 голосов
/ 28 июня 2011

Это один из способов сделать это:

<system.serviceModel>
  <services>
    <service behaviorConfiguration="Service1Behavior" name="WcfTest.Service1">
      <endpoint address="" contract="WcfTest.IService1" binding="wsHttpBinding" />
      <endpoint address="/basic/" binding="basicHttpBinding" contract="WcfTest.IService1" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="Service1Behavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

В приведенном выше примере я поставил wsHttpBinding по корневому адресу http://server/service1.svc, а basicHttpBinding можно найти по адресу http://server/service1.svc/basic/. Обратите внимание, что вы не сможете увидеть http://server/service1.svc/basic/ в браузере, но это не значит, что его там нет.

Чтобы добавить ссылку на конечную точку wsHttpBinding в Visual Studio, просто добавьте ссылку на службу, как обычно. Чтобы добавить ссылку на конечную точку basicHttpBinding, перейдите в диалоговое окно дополнительных настроек экрана «Добавить ссылку на службу» и выберите «Добавить веб-ссылку».

Обратите внимание, что для создания клиентских прокси для конечной точки basicHttpBinding необходимо использовать http://server/service1.svc и , а не http://server/service1.svc/basic/ при добавлении веб-ссылки. Но если вы внимательно посмотрите на сгенерированный файл .config на клиенте, вы увидите, что он использует / basic / endpoint так, как следует:

<endpoint address="http://server/Service1.svc/basic/"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1"
    contract="Service1Reference.IService1" name="BasicHttpBinding_IService1" />
...