2012-03-15 9 views
0

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

<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" /> 

Спасибо!

+0

Позвольте мне также упомянуть, что я хочу вызвать POST с html-страницы для этого webhttpbinding ... если это имеет какое-то значение. – DavieDave

ответ

1

У меня есть следующая запись службы элемента, который работает как 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. Вы не указали bindingConfiguration как "Postbinding" для webHttpEndpoint и "basicBinding" для BasicHttpBinding конечной

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

<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> 
+0

Кроме того, если вы хотите применить JsonBehavior, добавьте атрибут 'behaviorConfiguration =" JsonBehavior "' в элемент конечной точки PostMethod. –

+0

Хорошо, это, казалось, имело значение ... однако, когда я перешел http: //localhost/WebsiteName/MyService.svc/PostMethod Я получаю страницу, в которой говорится, что Endpoint не найден. – DavieDave

+0

nm ... Я думаю, что забыл, что PostMethod - это адрес. Мне нужно было добавить операцию дальше. Дух – DavieDave

Смежные вопросы