WCF 4 и несколько привязок конечных точек - PullRequest
0 голосов
/ 15 марта 2012

Я хочу иметь тот же контракт и сервис, которые будут доступны как и basicHttpBinding, и webHttpBinding, чтобы иметь возможность выполнять вызов POST. почему-то НИКОГДА не видит конечную точку для webHttpBinding, когда я смотрю на wsdl. Что я делаю не так?

<system.serviceModel>
<services>
  <service name="MyService">
    <endpoint address =""
              binding="basicHttpBinding"
              name="EndpointBasic"
              contract="IMyService"/>

    <endpoint address ="PostMethod"
              binding="webHttpBinding"
              name="EndpointJson"
              contract="IMyService"/>
    <host>
      <baseAddresses>
        <add baseAddress ="http://localhost/WebsiteName/MyService.svc"/>
      </baseAddresses>
    </host>
  </service>
</services>
<bindings>
  <basicHttpBinding>
    <binding name="basicBinding" />
  </basicHttpBinding>
  <webHttpBinding>
    <binding name="Postbinding"
             maxBufferSize="65536"
             maxReceivedMessageSize="2000000000"
             transferMode="Streamed">
    </binding>
  </webHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="JsonBehavior">
      <webHttp defaultOutgoingResponseFormat="Json" />
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

Спасибо!

1 Ответ

1 голос
/ 15 марта 2012

У меня есть следующая запись сервисного элемента, которая работает как для SOAP, так и для REST:

<service name="XMLService.RestAndSoapService" behaviorConfiguration="default">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="RestBinding" name="SampleService" contract="XMLService.IRestAndSoapService" />
        <endpoint address="soap" binding="basicHttpBinding" bindingConfiguration="noSecurity" contract="XMLService.IRestAndSoapService" />
      </service>

Точки, которые нужно отметить в вашей конфигурации:

  1. В вашем сервисном элементе ваш контракт и название сервиса не полностью определены. Убедитесь, что они полностью квалифицированы, т.е. включает пространство имен вместе с интерфейсом.

  2. Вы не указали связывание конфигурации как «Postbinding» для webHttpEndpoint и «basicBinding» для базовойHttpBinding конечной точки

Таким образом, с учетом вышеуказанных изменений ваша конфигурация может выглядеть так, как показано ниже:

<service name="namespace.MyService">
        <endpoint address =""
                  bindingConfiguration="basicBinding"
                  binding="basicHttpBinding"
                  name="EndpointBasic"
                  contract="namespace.IMyService"/>

        <endpoint address ="PostMethod"
                  bindingConfiguration="Postbinding"
                  binding="webHttpBinding"
                  name="EndpointJson"
                  contract="namespace.IMyService"/>
        <host>
          <baseAddresses>
            <add baseAddress ="http://localhost/WebsiteName/MyService.svc"/>
          </baseAddresses>
        </host>
      </service>
...