2016-04-21 12 views
1

Ich erhielt eine aktualisierte WSDL für einen Dienst Ich raubend, die unter Politik hat hinzugefügtWCF - Einstellung Politik für Username

<wsp:Policy wssutil:Id="UsernameToken"> 
<ns0:SupportingTokens xmlns:ns0="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512"> 
<wsp:Policy> 
<ns0:UsernameToken ns0:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512/IncludeToken/AlwaysToRecipient"> 
<wsp:Policy> 
    <ns0:WssUsernameToken10 /> 
    </wsp:Policy> 
    </ns0:UsernameToken> 
    </wsp:Policy> 
    </ns0:SupportingTokens> 
    </wsp:Policy> 

ich meine Referenz von rechts aktualisiert den Service Referenz klicken -> Konfigurieren von Dienst Option in Visual Studio. Dies erzeugte eine custom

mein früheres Basichttpbinding ersetzt
<customBinding> 
      <binding name="myBindingName"> 
       <!-- WsdlImporter encountered unrecognized policy assertions in ServiceDescription 'http://ouaf.oracle.com/webservices/cm/CM-CustConnAcctDetailExtract': --> 
       <!-- <wsdl:binding name='CM-CustConnAcctDetailExtractSoapBinding'> --> 
       <!--  <ns0:SupportingTokens xmlns:ns0="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512">..</ns0:SupportingTokens> --> 
       <textMessageEncoding messageVersion="Soap11" /> 
       <httpTransport /> 
      </binding> 
     </customBinding> 

Muß ich nur dieses custom benutzen? Oder gibt es eine Option in BasicBinding, die es funktioniert?

Wenn ich mein basicBinding mit TransportWithMessageCredential verwenden, erhalte ich unten Fehler:

The provided URI is Invalid; HTTPS is expected

ich dies mit SoapUI lief. Zusätzlich zu UserName und Passwrod musste ich WSS-PasswordType als PasswordText liefern. Ohne Versorgung diese Parameter, bekomme ich einen Fehler in SoapUI

Error on verifying message against security policy Error code:1000

Ich bin nicht sicher, wie WSS-PasswordType in meinem Basichttpbinding zu liefern.

Mein Basichttpbinding ist als unten

protected BasicHttpBinding GetBinding() 
    { 
     return new BasicHttpBinding() 
        { 
         Name = "BasicHttpBinding", 
         ReceiveTimeout = new TimeSpan(0, 0, 2, 0), 
         SendTimeout = new TimeSpan(0, 0, 2, 0), 
         Security = 
          { 
           Mode = BasicHttpSecurityMode.TransportCredentialOnly, 
           Transport = 
            { 
             ClientCredentialType = HttpClientCredentialType.Basic, 
             ProxyCredentialType = HttpProxyCredentialType.None, 
             Realm = "" 
            }, 
           Message = 
            { 
             ClientCredentialType = BasicHttpMessageCredentialType.UserName, 
             AlgorithmSuite = SecurityAlgorithmSuite.Default 
            } 
          }, 
         MaxBufferSize = Int32.MaxValue, 
         MaxReceivedMessageSize = Int32.MaxValue, 
         ReaderQuotas = new XmlDictionaryReaderQuotas() 
         { 
          MaxBytesPerRead = 8192 
         } 
        }; 
    } 

Antwort

1

ich in der Lage bin, dies durch zu arbeiten, indem auf Custom meine Bindung Bindung

protected CustomBinding GetCustomBinding() 
    { 
     var customBinding = new CustomBinding() { Name = "CustomBinding" }; 

     customBinding.Elements.Add(new TextMessageEncodingBindingElement() { MessageVersion = MessageVersion.Soap11 }); 
     var securityBindingElement = SecurityBindingElement.CreateUserNameOverTransportBindingElement(); 
     securityBindingElement.AllowInsecureTransport = true; 
     securityBindingElement.EnableUnsecuredResponse = true; 
     securityBindingElement.IncludeTimestamp = false; 
     customBinding.Elements.Add(securityBindingElement); 
     customBinding.Elements.Add(new HttpTransportBindingElement()); 

     return customBinding; 
    }