2009-11-17 15 views
1

Nous essayons de créer une classe "proxy" qui servirait le service WCF avec ses propriétés de configuration. Comme nous ne pouvons pas stocker ces propriétés dans le fichier app.config, je cherche un moyen de le "proxy" et d'utiliser customSection configuration qui fournirait toutes ces données sur demande. Pour ce faire, je devrais dire au framework .NET de charger system.serviceModel en utilisant ma propre ConfigurationSection, et je ne suis pas sûr de pouvoir le faire.Pouvez-vous remplacer la section de configuration system.serviceModel?

Si quelqu'un peut soit approuver mon hypothèse, ou mieux encore, donnez-moi une idée de comment puis-je les paramètres de configuration WCF en utilisant une autre source, qui serait utile.

grâce

Répondre

1

si vous cherchez la façon de créer et d'enregistrer votre service WCF dans le code pls vérifier le code ci-dessous pour un exemple:

ci-dessous est une méthode pour créer l'objet hôte de service:

public static ServiceHost RegisterService<T>(object service, int port, string serviceName) 
{ 
    // Returns a list of ipaddress configuration 
    IPHostEntry ips = Dns.GetHostEntry(Dns.GetHostName()); 

    // Select the first entry. I hope it's this maschines IP 
    IPAddress ipAddress = ips.AddressList[0]; 

    // Create the url that is needed to specify where the service should be started 
    string urlService = "net.tcp://" + ipAddress.ToString() + String.Format(":{0}/{1}", port, serviceName); 

    // Instruct the ServiceHost that the type that is used is a ServiceLibrary.service1 
    ServiceHost host = new ServiceHost(service); 
    // define events if needed 
    //host.Opening += new EventHandler(HostOpeningEvent); 
    //host.Opened += new EventHandler(HostOpenedEvent); 
    //host.Closing += new EventHandler(HostClosingEvent); 
    //host.Closed += new EventHandler(HostClosedEvent); 

    // The binding is where we can choose what transport layer we want to use. HTTP, TCP ect. 
    NetTcpBinding tcpBinding = new NetTcpBinding(); 
    tcpBinding.TransactionFlow = false; 
    tcpBinding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign; 
    tcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows; 
    tcpBinding.Security.Mode = SecurityMode.None; 

    // Add a endpoint 
    host.AddServiceEndpoint(typeof(T), tcpBinding, urlService); 

    // A channel to describe the service. Used with the proxy scvutil.exe tool 
    ServiceMetadataBehavior metadataBehavior; 
    metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>(); 
    if (metadataBehavior == null) 
    { 
     string httpURL = "http://" + ipAddress.ToString() + String.Format(":{0}/{1}", port + 1, serviceName); 

     // This is how I create the proxy object that is generated via the svcutil.exe tool 
     metadataBehavior = new ServiceMetadataBehavior(); 
     metadataBehavior.HttpGetUrl = new Uri(httpURL); 
     metadataBehavior.HttpGetEnabled = true; 
     metadataBehavior.ToString(); 
     host.Description.Behaviors.Add(metadataBehavior); 
    } 
    return host; 
} 

est ici comment vous pouvez l'utiliser:

ServiceHost host = RegisterService<your_service_interface>(your_service, port, "yout_service_name"); 
host.Open(); 

espoir e est utile, salutations