2010-11-22 18 views
2

Lors de la mise à jour du programme web.config pour un service WCF il est possible d'ajouter un comportement en faisant ...Comment ajouter section liaisons WCF à web.config programme

ServiceModelSectionGroup secgroup = (ServiceModelSectionGroup)_webConfig.GetSectionGroup("system.serviceModel"); 
      ServiceBehaviorElement SerBeh3 = new ServiceBehaviorElement(); 
      SerBeh3.Name = "AuthenticationSvcWrapBehavior"; 
      secgroup.Behaviors.ServiceBehaviors.Add(SerBeh3); 

Ma question est de savoir comment vous ajoutez la section de liaison? Tout ce que je veux faire est de créer une liaison avec le nom, Mode et Transport.ClientCredentialType, puis définir la BindingConfiguration à ce nom pour le point de terminaison.

Répondre

2

Je compris comment ajouter la section de liaison dans la configuration. Peut-être que je suis dense mais je pense que la documentation sur les changements de configuration suce ...

//Update Service model for wcf services   
      ServiceModelSectionGroup secgroup = (ServiceModelSectionGroup)_webConfig.GetSectionGroup("system.serviceModel"); 

      //Add the binding section with the settings that enable HTTPS communications 
      secgroup.Bindings.BasicHttpBinding.Bindings.Add(CreateBasicHttpBinding("SecureWebBinding", 
                        BasicHttpSecurityMode.Transport, 
                        HttpClientCredentialType.None)); 

private BasicHttpBindingElement CreateBasicHttpBinding(string name, BasicHttpSecurityMode mode, HttpClientCredentialType credentialType) 
    { 
     BasicHttpBindingElement basicHttpBinding = new BasicHttpBindingElement(); 
     basicHttpBinding.Name = name; 
     basicHttpBinding.Security.Mode = BasicHttpSecurityMode.Transport; 
     basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 
     return basicHttpBinding; 
    } 
0

Vous pouvez l'éditer comme n'importe quel autre fichier XML, mais je ne pense pas que les modifications prendront effet tant que vous n'aurez pas redémarré l'application.

Personnellement, je n'utilise plus la configuration XML pour WCF. Les avantages d'une solution de code pur surpasser les inconvénients pour moi.

+1

Merci pour les commentaires ... Curieux si vous avez des exemples de la façon dont vous avez fait cela. MSDN contredit directement et dit que l'utilisation de code n'est pas une meilleure pratique ... http://msdn.microsoft.com/en-us/library/ms731080.aspx – BigTundra

0

Um .. Je devrais ajouter ceci comme un commentaire, mais apparemment mon cerveau est juste allé au large de la fin profonde, et je ne peux pas localiser le lien de réponse sur les commentaires plus :((Cerveau triste) Anyhoo, j'ai été surpris par votre assertion que M $ déprécie la configuration de wcf config du code, jusqu'à ce que je lise le lien - je dirais que leur intention est que les fichiers de configuration sont préférables au code config qui est codé en dur dans le code Lorsque vos valeurs de liaison viennent un système de configuration sw dynamique, la configuration du code est meilleure que la configuration du fichier hérés mon code pour créer une liaison http basit, avec ou sans ssl:

public static BasicHttpBinding GetBinding(string Url, int timeoutSeconds) 
    { 
     BasicHttpBinding binding = null; 
     UriBuilder urb = new UriBuilder(Url); 

     switch (urb.Scheme) 
     { 
      case "http": 
       binding = new BasicHttpBinding(BasicHttpSecurityMode.None); 
       break; 
      case "https": 
       binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport); 
       break; 
      default: 
       throw new ArgumentException("unknown scheme : " + urb.Scheme); 
     } 
     binding.ReaderQuotas.MaxStringContentLength = int.MaxValue; 
     binding.MaxBufferPoolSize = int.MaxValue; 
     binding.MaxReceivedMessageSize = int.MaxValue; 
     binding.MaxBufferSize = int.MaxValue; 
     if (timeoutSeconds > 0) 
      binding.SendTimeout = TimeSpan.FromSeconds(timeoutSeconds); 

     return binding; 

    } 

l'appelant appelle

EndpointAddress addr = new EndpointAddress(url); 
    Binding bind = DataProviderUtilities.GetBinding(_url, timeOutSeconds); 
yourserviceClient foo = new yourServiceClient(addr, bind);