Можете ли вы переопределить раздел конфигурации system.serviceModel? - PullRequest
1 голос
/ 17 ноября 2009

Мы пытаемся создать прокси-класс, который бы обслуживал службу WCF со своими свойствами конфигурации.

Поскольку мы не можем сохранить эти свойства в файле app.config, я ищу способ его «прокси» и использования пользовательской настройки ConfigurationSection, которая предоставит все эти данные по запросу. Чтобы сделать это, мне нужно указать платформе .NET загрузить system.serviceModel, используя мой собственный ConfigurationSection, и я не уверен, что смогу это сделать.

Если кто-то может одобрить мое предположение или, что еще лучше, дать мне идею, как я могу настроить параметры конфигурации WCF с использованием другого источника, это было бы полезно.

спасибо

1 Ответ

1 голос
/ 18 ноября 2009

, если вы ищете способ создать и зарегистрировать службу wcf в коде pls, проверьте приведенный ниже код для примера:

ниже приведен метод для создания объекта узла службы:

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;
}

вот как вы можете его использовать:

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

надеюсь, это поможет, с уважением

...