2010-11-17 14 views
9

Ho un servizio .Net in esecuzione su IIS 6 e WCF per cui voglio creare due endpoint. Uno protetto con HTTPS e autenticazione di base a cui sarà possibile accedere dalla nostra DMZ e da un endpoint senza alcuna sicurezza che sarà accessibile solo dalla rete interna sicura. Un firewall e forse filtri .Net garantiranno che il servizio non protetto non sia accessibile al di fuori della rete sicura.Due endpoint per lo stesso servizio in WCF, uno protetto non

Finora non sono riuscito a ottenere due endpoint che funzionano con diversi parametri di sicurezza. Una configurazione che ho provato è:

<service name="My.Service"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost/MyService/"/> 
     </baseAddresses> 
    </host> 
    <endpoint address="UnSecuredAccessToMyService.svc" 
       behaviorConfiguration="restBehavior" 
       name="UnSecureEndpoint" 
       binding="webHttpBinding" 
       bindingName="SomeBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
    <endpoint address="SecuredAccessToMyService.svc" 
       behaviorConfiguration="secBehavior" 
       name="SecuredEnpoint" 
       binding="webHttpBinding" 
       bindingConfiguration="customSecureBinding" 
       bindingName="SecBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
</service> 

<behaviors> 
    <endpointBehaviors> 
     <behavior name="restBehavior"> 
      <webHttp /> 
     </behavior> 
     <behavior name="secBehavior"> 
     </behavior> 
    </endpointBehaviors> 
</behaviors> 

<bindings> 
    <webHttpBinding> 
     <binding name="customSecureBinding"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Basic"/> 
      </security> 
     </binding> 
    </webHttpBinding> 
</bindings> 

I file UnSecuredAccessToMyService.svc e SecuredAccessToMyService.svc assomigliano:

<%@ ServiceHost 
    Factory="somefactory, anotherfactory" 
    Service="My.Service, AnotherService" 
%> 

Sono molto nuovo per WCF e .Net dettagli in modo più potrebbe davvero aiutare, grazie!

risposta

7

Sembra che le associazioni e i comportamenti siano un po 'confusi. Provare a cambiare la configurazione per il seguente:

<services> 

    <service name="My.Service"> 
     <endpoint address="UnSecuredAccessToMyService.svc" 
        binding="webHttpBinding" 
        bindingNamespace="http://mydomain/myservice" 
        contract="Domain.MyService.MyClass" /> 

     <endpoint address="SecuredAccessToMyService.svc" 
        binding="webHttpBinding" 
        bindingName="secureWebHttpBinding" 
        bindingNamespace="http://mydomain/myservice" 
        contract="Domain.MyService.MyClass" /> 
    </service> 

</services> 

<bindings> 
    <webHttpBinding> 
     <binding name="secureWebHttpBinding"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Basic"/> 
      </security> 
     </binding> 
    </webHttpBinding> 
</bindings> 

Questo specifica entrambi gli endpoint dovrebbero usare WebHttpBinding, ma si userà il default di legame e un altro ti ha utilizzato un "secureWebHttpBinding" vincolante di nome che è configurato per utilizzare la protezione a livello di trasporto (SSL) e autenticazione client di base.

Questi non dovrebbero richiedere ulteriore configurazione o comportamento personalizzato a meno che non si abbia necessità oltre a ciò che è built-in di default.

Sfortunatamente un sacco di WCF è un debug di tipo trial-and-error finché non si identifica esattamente quale elemento non funziona correttamente. Se le informazioni che ti ho fornito non funzionano, specifica più sintomi del tuo problema e proverò a dare ulteriore assistenza.

+0

not _bindingNamespace_ sarà *** httpS ***? L'URI (o ** baseaddress **) è _'https: // mydomain/myservice'_? – Kiquenet

+0

Lo spazio dei nomi è un URI che qualifica in modo univoco gli elementi XML dai metadati di associazione dei servizi in modo che non siano ambigui. Può essere un qualsiasi valore URI, ma in genere prende il da un URL per dargli una certa leggibilità.Lo schema http: // viene spesso utilizzato quando si desidera fornire una qualche forma di documentazione in quella posizione. –

1

Utilizzare la configurazione come

<service name="My.Service"> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost/MyService/UnSecuredAccessToMyService.svc"/> 
     </baseAddresses> 
    </host> 
    <endpoint address="UnSecuredAccessToMyService" 
       behaviorConfiguration="restBehavior" 
       name="UnSecureEndpoint" 
       binding="webHttpBinding" 
       bindingName="SomeBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
    <endpoint address="SecuredAccessToMyService" 
       behaviorConfiguration="secBehavior" 
       name="SecuredEnpoint" 
       binding="webHttpBinding" 
       bindingConfiguration="customSecureBinding" 
       bindingName="SecBindingName" 
       bindingNamespace="http://mydomain/myservice" 
       contract="Domain.MyService.MyClass" /> 
</service> 

Si noti che il address = "UnSecuredAccessToMyService" e address = "SecuredAccessToMyService" per una parte finale che è molto importante. Ora, quando si sta chiamando l'URL dal cliente è necessario chiamare l'URI come http://localhost/MyService/UnSecuredAccessToMyService.svc/UnSecuredAccessToMyService per accesso non protetto e http://localhost/MyService/UnSecuredAccessToMyService.svc/SecuredAccessToMyService per l'accesso sicuro.

BaseAddress dovrebbe essere il nome completo compreso .svc

utilizzando la configurazione sopra di voi sarà in grado di utilizzare lo stesso file .svc, stesso contratto, stessa operazione/metodo, ma 2 diversi endpoint, 1 sicuro e 1 non protetto.

+0

Sicuro sarà *** httpS ***? L'URI (o ** baseaddress **) è _'https: // mydomain/myservice'_? _'HTTPS: //localhost/MyService/UnSecuredAccessToMyService.svc'_ – Kiquenet

Problemi correlati