2010-10-25 14 views
0

Je suis un peu nouveau à WCF et la mise en place du service et j'ai 2 questions. Ma première question J'ai un service qui sera accessible via https sur un serveur web. Cependant localement sur mon IIS7 local, il sera accédé via http car https n'est pas disponible. Comment puis-je configurer un service accessible par les deux?Configurer le service wcf pour http et https et également ajouter un nom d'utilisateur/mot de passe à son accès

Ma deuxième question concerne la façon dont je peux mettre en place un service qui nécessite un nom d'utilisateur et un mot de passe pour accéder. Le service que j'ai en place je ne veux pas que les méthodes dedans soient accessibles à moins que l'application d'appel ait les droits de le faire?

Voici un exemple de la zone pertinente de mon fichier web.config.

<system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
      <!-- standard AJAX binding that supports SSL --> 
      <binding name="TransportSecurity"> 
       <security mode="Transport" /> 
      </binding> 
      <!-- standard AJAX binding for HTTP only --> 
      <binding name="NoSecurity"> 
       <security mode="None" /> 
      </binding> 
     </webHttpBinding> 
    </bindings> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="EndPointBehavior"> 
       <enableWebScript /> 
      </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceBehavior"> 
       <serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" includeExceptionDetailInFaults="true" /> 
       <serviceMetadata httpGetEnabled="true" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    <services> 
     <service behaviorConfiguration="ServiceBehavior" name="ServiceName"> 
      <endpoint address="" 
         behaviorConfiguration="EndPointBehavior" 
         binding="webHttpBinding" 
         bindingConfiguration="NoSecurity" 
         contract="App.Service.ServiceName" /> 
     </service> 
    </services> 
    <diagnostics> 
     <messageLogging logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="false" logMalformedMessages="true" logEntireMessage="false" maxSizeOfMessageToLog="65535000" maxMessagesToLog="500" /> 
    </diagnostics> 
</system.serviceModel> 

Dans cette configuration, le service est mis en place pour http et ne nom d'utilisateur/mot de passe appliqué.

Répondre

0

Vous pouvez ajouter la configuration de mot de passe de nom d'utilisateur pour vos fixations:

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

et

  <security mode="TransportCredentialOnly"> <!-- This means http + credential --> 
       <transport clientCredentialType="Basic" /> 
      </security> 

En ce qui concerne l'autorisation, il y a un tas d'options. Le tout est plus simple d'appliquer un mot de passe de nom d'utilisateur personnalisé validateur (exemple artibtrary pris de http://blogs.msdn.com/b/pedram/archive/2007/10/05/wcf-authentication-custom-username-and-password-validator.aspx):

<serviceBehaviors> 
    <behavior name="CustomValidator"> 
    <serviceCredentials> 

     <userNameAuthentication 
     userNamePasswordValidationMode="Custom" 
     customUserNamePasswordValidatorType= 
    </behavior> 
</serviceBehaviors> 

A un niveau plus sophistiqué, lire sur le ServiceAuthorizationManager:

http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceauthorizationmanager.aspx

+0

Brillant - merci pour ce. Sur le point de l'essayer. Des idées sur la façon dont je peux rendre un service disponible en http et https? Comme j'ai des situations dans lesquelles cela se produit. – amateur