2016-09-28 5 views
0

Ich versuche, einen SOAP-Dienst zu konsumieren und habe Authentifizierungsprobleme und denke, dass ich etwas sinnvolles fehlen kann. Ich denke, das Problem könnte darin liegen, dass ich den Header mehr als nur die Zugangsdaten übergebe (was meiner Meinung nach das ist, was ich tun muss, aber denke, dass es die Situation noch einzigartiger macht). Im Folgenden finden Sie meine Konfigurationsdatei und den Code, den ich zur Authentifizierung verwende.Wcf grundlegende Authentifizierung nicht akzeptiert Benutzername

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="MemberSoap"> 
      <security mode="Transport" /> 
     </binding> 
     <binding name="MemberSoap1" /> 
     <binding name="TransactionSoap"> 
      <security mode="Transport" /> 
     </binding> 
     <binding name="TransactionSoap1" /> 
     <binding name="CertificateSoap" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"> 
      <readerQuotas maxDepth="32" maxArrayLength="2147483647" maxStringContentLength="2147483647"/> 
      <security mode="Transport" /> 
     </binding> 
     <binding name="CertificateSoap1" /> 
     <binding name="MembershipSoap"> 
      <security mode="Transport"> 
      <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" /> 
      <message clientCredentialType="Certificate" algorithmSuite="Default" /> 
      </security> 
     </binding> 
     <binding name="ContentSoap"> 
      <security mode="Transport" /> 
     </binding> 
     <binding name="ContentSoap1" /> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://membership/member.asmx" 
     binding="basicHttpBinding" bindingConfiguration="MemberSoap" 
     contract="Member.MembershipWsMemberSoap" name="Ovs.Membership.Ws.MemberSoap" /> 
     <endpoint address="https://membership/transaction.asmx" 
     binding="basicHttpBinding" bindingConfiguration="TransactionSoap" 
     contract="MembershipWsTransactionSoap" name="TransactionSoap" /> 
     <endpoint address="https://membership/certificate.asmx" 
     binding="basicHttpBinding" bindingConfiguration="CertificateSoap" 
     contract="MembershipWsCertificateSoap" name="CertificateSoap" /> 
     <endpoint address="https://ngmembership/Membership.svc" 
     binding="basicHttpBinding" bindingConfiguration="MembershipSoap" 
     contract="Membership.IMembership" name="MembershipSoap" /> 
     <endpoint address="https://membership/content.asmx" 
     binding="basicHttpBinding" bindingConfiguration="ContentSoap" 
     contract="Content.MembershipWsContentSoap" name="ContentSoap" /> 
    </client> 
    </system.serviceModel> 
    <appSettings> 
     <add key="UsernameAuth" value="user" /> 
     <add key="PasswordAuth" value="pass" /> 
    </appSettings> 
</configuration> 

ich links sowie die vollständigen Namensräume die Basis-URL für Sicherheitszwecke, aber die, die ich in erster Linie besorgt bin, ist der Name = „MembershipSoap“ Service. Hier ist mein erster Versuch mit dem Code, den ich benutze, um mich zu authentifizieren.

Ich bekomme eine Fehlermeldung, dass "ungültige Web-Service-Anmeldeinformationen verwendet wurden". Also habe ich nach dem Lesen die erste Methode dazu geschaltet.

public Transaction[] GetAllBookingInfo(string memberId, string partnerId) 
{ 
    AllBookingsByMemberIdRS response; 

    var client = new MembershipClient(); 
    client.ClientCredentials.UserName.UserName = "user"; 
    client.ClientCredentials.UserName.Password = "pass"; 

    using (new OperationContextScope(client.InnerChannel)) 
    { 
     var request = new AllBookingsByMemberIdRQ 
     { 
      MemberId = memberId, 
      PartnerId = partnerId 
     }; 
     response = AuthenticateServiceUser.membershipSession.GetAllBookingsByMemberId(request); 
    } 
    var trans = response.Transactions; 
    return trans; 
} 

Und jetzt bekomme ich eine 'Der Benutzername wird nicht zur Verfügung gestellt. Geben Sie den Benutzernamen in den ClientCredentials-Fehlern an. Jetzt fühle ich mich, als würde ich weiter weggehen, wo ich vorher war. Vielleicht kann jemand etwas Licht darauf werfen? Danke im Voraus!

Antwort

0

Ich fand es heraus. Ich rede dumm auf einen anderen Client in meinem Code - einen ohne Anmeldeinformationen. Es sind immer diese einfachen Fehler, die übersehen werden.

public Transaction[] GetAllBookingInfo(string memberId, string partnerId) 
{ 
    AllBookingsByMemberIdRS response; 
    using (var client = new MembershipClient()) 
    using (new OperationContextScope(client.InnerChannel)) 
    { 
     // add the basic auth header 
     OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] 
      = GetBasicAuthHeader("user", "pass"); 
     var request = new AllBookingsByMemberIdRQ 
     { 
      MemberId = memberId, 
      PartnerId = partnerId 
     }; 
     response = client.GetAllBookingsByMemberId(request); 
    } 
    return response.Transactions; 
} 
Verwandte Themen