Как программно добавить секцию привязок wcf в web.config - PullRequest
2 голосов
/ 22 ноября 2010

При программном обновлении web.config для службы wcf можно добавить поведение, выполнив ...

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

Мой вопрос: как добавить раздел привязки?

Все, что я хочу сделать, это создать привязку с именем, Mode и Transport.ClientCredentialType, а затем установить BindingConfiguration на указанное имя для конечной точки.

Ответы [ 3 ]

2 голосов
/ 23 ноября 2010

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

//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 голосов
/ 23 ноября 2010

Гм ... Я должен добавить это как комментарий, но, очевидно, мой мозг просто вышел из глубины, и я больше не могу найти ссылку для ответа на комментарии :( (Грустный мозг) Anyhoo, я был удивлен вашим утверждениемчто M $ не поддерживает настройку конфигурации wcf из кода, пока я не прочту ссылку - я бы сказал, что их намерения состоят в том, чтобы эти файлы конфигурации были предпочтительнее кода конфигурации , который жестко задан в коде . Когда приходят значения привязкииз динамической конфигурации SW, конфигурация кода намного лучше, чем конфигурация файла. Вот мой код для создания базовой привязки http, с или без 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;

    }

, вызывающая сторона вызывает

   EndpointAddress addr  = new EndpointAddress(url);
   Binding bind =  DataProviderUtilities.GetBinding(_url, timeOutSeconds);
yourserviceClient foo = new yourServiceClient(addr, bind);
0 голосов
/ 22 ноября 2010

Вы можете редактировать его, как любой другой файл XML, но я не думаю, что изменения вступят в силу, пока вы не перезапустите приложение.

Лично я больше не использую конфигурацию XML для WCF.Преимущества решения с чистым кодом значительно превосходят для меня недостатки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...