cannot - cs0103 c# the name configurationmanager does not exist in the current context




Caricamento della sezione di configurazione System.ServiceModel mediante ConfigurationManager (4)

GetSectionGroup () non supporta alcun parametro (nell'ambito del framework 3.5).

Usa invece:

Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ServiceModelSectionGroup group = System.ServiceModel.Configuration.ServiceModelSectionGroup.GetSectionGroup(config);

Usando C # .NET 3.5 e WCF, sto provando a scrivere alcune delle configurazioni di WCF in un'applicazione client (il nome del server al quale il client si sta connettendo).

Il modo ovvio è usare ConfigurationManager per caricare la sezione di configurazione e scrivere i dati di cui ho bisogno.

var serviceModelSection = ConfigurationManager.GetSection("system.serviceModel");

Sembra restituire sempre null.

var serviceModelSection = ConfigurationManager.GetSection("appSettings");

Funziona perfettamente.

La sezione di configurazione è presente in App.config ma per qualche motivo ConfigurationManager rifiuta di caricare la sezione system.ServiceModel .

Voglio evitare di caricare manualmente il file xxx.exe.config e utilizzare XPath, ma se dovessi ricorrere a ciò lo farò. Sembra un po 'un trucco.

Eventuali suggerimenti?


Grazie agli altri poster questa è la funzione che ho sviluppato per ottenere l'URI di un endpoint con nome. Crea inoltre un elenco degli endpoint in uso e il file di configurazione effettivo utilizzato durante il debug:

Private Function GetEndpointAddress(name As String) As String
    Debug.Print("--- GetEndpointAddress ---")
    Dim address As String = "Unknown"
    Dim appConfig As Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
    Debug.Print("app.config: " & appConfig.FilePath)
    Dim serviceModel As ServiceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(appConfig)
    Dim bindings As BindingsSection = serviceModel.Bindings
    Dim endpoints As ChannelEndpointElementCollection = serviceModel.Client.Endpoints
    For i As Integer = 0 To endpoints.Count - 1
        Dim endpoint As ChannelEndpointElement = endpoints(i)
        Debug.Print("Endpoint: " & endpoint.Name & " - " & endpoint.Address.ToString)
        If endpoint.Name = name Then
            address = endpoint.Address.ToString
        End If
    Next
    Debug.Print("--- GetEndpointAddress ---")
    Return address
End Function

Questo è quello che stavo cercando grazie a @marxidad per il puntatore.

    public static string GetServerName()
    {
        string serverName = "Unknown";

        Configuration appConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        ServiceModelSectionGroup serviceModel = ServiceModelSectionGroup.GetSectionGroup(appConfig);
        BindingsSection bindings = serviceModel.Bindings;

        ChannelEndpointElementCollection endpoints = serviceModel.Client.Endpoints;

        for(int i=0; i<endpoints.Count; i++)
        {
            ChannelEndpointElement endpointElement = endpoints[i];
            if (endpointElement.Contract == "MyContractName")
            {
                serverName = endpointElement.Address.Host;
            }
        }

        return serverName;
    }

http://mostlytech.blogspot.com/2007/11/programmatically-enumerate-wcf.html

// Automagically find all client endpoints defined in app.config
ClientSection clientSection = 
    ConfigurationManager.GetSection("system.serviceModel/client") as ClientSection;

ChannelEndpointElementCollection endpointCollection =
    clientSection.ElementInformation.Properties[string.Empty].Value as     ChannelEndpointElementCollection;
List<string> endpointNames = new List<string>();
foreach (ChannelEndpointElement endpointElement in endpointCollection)
{
    endpointNames.Add(endpointElement.Name);
}
// use endpointNames somehow ...

Sembra funzionare bene.





configurationmanager