2016-04-05 9 views
0

Ich habe eine IIS gehosteten WCF Restful-Dienst implementiert, die mit der folgenden Konfiguration ausgeführt wird (vereinfacht, sondern nur die relevanten Konfigurations hier):Wie kombiniere ich meine WCF webHttpBinding mit einer customBinding, um webMessageEncoding zu ändern?

<system.serviceModel> 
    <bindings> 
     <!-- My old working webHttpBinding --> 
     <webHttpBinding> 
      <binding name="RestBinding" maxBufferPoolSize="524288" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">   
       <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" 
        maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
       <security mode="Transport"> 
        <transport clientCredentialType="None"/> 
       </security> 
      </binding> 
     </webHttpBinding> 
     <!-- My new custom binding which should replace my webHttpBinding--> 
     <customBinding> 
      <binding name="CustomMapper">   
       <webMessageEncoding webContentTypeMapperType="CustomTypeMapper, MyService.Lib" /> 
       <httpTransport authenticationScheme="None" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" 
        manualAddressing="true" />   
      </binding> 
     </customBinding> 
    </bindings> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="restbehavior">   
       <webHttp/>   
      </behavior>    
     </endpointBehaviors>    
    </behaviors> 
    <services> 
     <!-- My endpoint where I have changed binding from webHttpBinding to customBinding 
      and bindingConfiguration from RestBinding to CustomMapper --> 
     <service behaviorConfiguration="servicebehavior" name="MyService"> 
      <endpoint address="rest" binding="customBinding" name="RESTEndPoint" bindingConfiguration="CustomMapper" 
       behaviorConfiguration="restbehavior" contract="IMyService" /> 
      <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
     </service> 
    </services>  
</system.serviceModel> 

Solange ich den Dienst mit meinem alten webHttpBinding alles bin läuft gut ist , aber sobald ich auf die benutzerdefinierte Konfiguration umschalte, erhalte ich beim Aufruf des Dienstes einen 404-Statuscode.

Ich brauche die customBinding, weil ich einen eingehenden Stream für den Dienst verwenden muss und ich brauche den Inhaltstyp "application/JSON" anstatt nur "text/plain" zu unterstützen (Ganz ähnlich wie this Problem).

Aber wie konfiguriere ich meine Bindung richtig? Ich habe versucht, this Ansatz zu folgen, aber es gelingt mir nicht.

Irgendwie muss ich mein webHttpBinding mit meinem customBinding kombinieren/konvertieren. Was muss ich tun?

Antwort

1

Ich kann sehen, dass Sie in der alten Bindung es als https-Bindung wegen des Sicherheitsmodus verwendet haben, den Sie hinzugefügt haben.

  <security mode="Transport"> 
       <transport clientCredentialType="None"/> 
      </security> 

Um dieses gleiche Verhalten in benutzerdefinierten Bindungen haben Sie es zu httpsTransport statt Httptransport auf folgende Weise ändern müssen:

<customBinding> 
     <binding name="CustomMapper">   
      <webMessageEncoding webContentTypeMapperType="CustomTypeMapper, MyService.Lib" /> 
      <httpsTransport authenticationScheme="None" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" 
       manualAddressing="true" />   
     </binding> 
    </customBinding>