2012-03-15 3 views
0

Je souhaite avoir le même contrat et le même service à exposer que basicHttpBinding et webHttpBinding pour pouvoir faire un appel POST. en quelque sorte, il ne voit JAMAIS le point de terminaison pour webHttpBinding quand je regarde le wsdl. Qu'est ce que je fais mal?WCF 4 et plusieurs liaisons de point de terminaison

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

Merci!

+0

Permettez-moi également de mentionner que je veux appeler un POST à ​​partir d'une page html pour ce webhttpbinding ... si cela fait une différence en quelque sorte. – DavieDave

Répondre

1

J'ai l'entrée de l'élément de service suivant qui fonctionne à la fois SOAP et 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> 

Points à noter dans votre config:

  1. Dans votre élément de service de votre nom de contrat et le service sont pas entièrement qualifié. Assurez-vous qu'ils sont pleinement qualifiés c.-à-d. inclut l'espace de noms avec l'interface.

  2. Vous n'avez pas spécifié le bindingConfiguration comme "Postbinding" pour webHttpEndpoint et "basicBinding" pour point final basicHttpBinding

Donc, avec les modifications ci-dessus votre configuration pourrait ressembler comme indiqué ci-dessous:

<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

En outre, si vous souhaitez que le "JsonBehavior" s'applique, ajoutez l'attribut 'behaviorConfiguration =" JsonBehavior "' à l'élément final "PostMethod". –

+0

Ok, cela a semblé faire une différence ... mais quand je suis arrivé à http: //localhost/WebsiteName/MyService.svc/PostMethod, j'ai une page qui dit que Endpoint n'a pas été trouvé. – DavieDave

+0

nm ... Je pense que j'ai oublié que PostMethod est l'adresse .. J'avais besoin d'ajouter l'opération au-delà de cela. duh – DavieDave

Questions connexes