Подтвердить что ты не робот

Как я могу программно создать эту настраиваемую привязку?

Нам нужно получить доступ к веб-службе, использующей soap11... нет проблем. Я просто установил привязку как:

BasicHttpBinding wsBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential);

Неа. Нет кубиков. Поэтому я спросил у хозяина службы, почему у нас возникают проблемы с проверкой подлинности, и он сказал, что наш конфиг должен иметь эту настраиваемую привязку:

<bindings>
    <customBinding>
        <binding name="lbinding">
            <security  authenticationMode="UserNameOverTransport" 
                messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11" 
                securityHeaderLayout="Strict" 
                includeTimestamp="false"
                requireDerivedKeys="true" 
                keyEntropyMode="ServerEntropy">
            </security>
            <textMessageEncoding messageVersion="Soap11" />
            <httpsTransport authenticationScheme ="Negotiate" requireClientCertificate ="false" realm =""/>
        </binding>
    </customBinding>
</bindings>

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

4b9b3361

Ответ 1

Решил!

Здесь выигрышный код для тех, кто находится в подобном затруднительном положении.

Uri epUri = new Uri(_serviceUri);
CustomBinding binding = new CustomBinding();
SecurityBindingElement sbe = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
sbe.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11;        
sbe.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
sbe.IncludeTimestamp = false;
sbe.SetKeyDerivation(true);
sbe.KeyEntropyMode = System.ServiceModel.Security.SecurityKeyEntropyMode.ServerEntropy;
binding.Elements.Add(sbe);
binding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, System.Text.Encoding.UTF8));
binding.Elements.Add(new HttpsTransportBindingElement());
EndpointAddress endPoint = new EndpointAddress(epUri);

Ответ 2

@D. Forrest уже нашел решение, но простой способ увидеть, какие объекты задействованы для данной конфигурации WCF, - это вызвать .Endpoint.Binding.CreateBindingElements() на клиентском прокси, который вы используете. Вы можете сбросить дерево объектов каждого элемента в возвращаемом списке и посмотреть, как настроена привязка.