verbrauchen webservice mittels https-Protokoll

Entwickle ich eine Anwendung, wo ich Sie zu verbrauchen webservice in Java entwickelt mit http-Protokoll.
ich bin der Entwicklung der Anwendung verwenden C#.NET winforms.alles funktioniert einwandfrei tillnow.aber der webservice ist nun mit ssl-Sicherheit, damit Sie die Dienst-url-Protokoll geändert von http zu https.jetzt bin ich fcing die Probleme beim Zugriff auf die https-webservice.

ich habe versucht, den Zugriff auf die https-webservice von der SoapUI, indem Sie die Authenticaion Parameter (Benutzername und Passwort) aus der Auth-Registerkarte, wie unten gezeigt:

verbrauchen webservice mittels https-Protokoll

Es ist in Ordnung, die von SoapUI.

aber wen ich die Authenticaion Parameter aus dem code, wie unten seine nicht funktioniert:

client.ClientCredentials.UserName.UserName = "admin";
client.ClientCredentials.UserName.Password = "*******";

Ich bin mit Sicherheit Modus : TransportWithMessageCredential
und
ClientCredentialTtype als : Basic

Meine App.Config - Datei ist wie folgt:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.serviceModel>
    <client>
      <endpoint address="https://xyz:8001/HelloWorldAPI/HelloWorldWebService"
       binding="wsHttpBinding"
        bindingConfiguration="myhttpsbinding" contract="API.HelloWorldWebService"
        name="HelloWorldWebServicePort" />
    </client>
    <bindings>
      <wsHttpBinding>
        <binding name="myhttpsbinding">
          <security mode="TransportWithMessageCredential">
            <transport clientCredentialType="Basic"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>
  <system.net>
    <defaultProxy useDefaultCredentials="true" />
  </system.net>
</configuration>

Mein Code wie folgt:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
using testingtool.API;

namespace testingtool
{
    class Program
    {
        static void Main(string[] args)
        {
            new APITool();
        }
    }
    class APITool
    {
        UserInfo userinfo = new UserInfo();
        HelloWorldWebServiceClient client = new HelloWorldWebServiceClient();

        private bool ValidationCallBack(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
        {
            return true;
        }

        public APITool()
        {
            try
            {
                //Authentication parameters
                client.ClientCredentials.UserName.UserName = "admin";
                client.ClientCredentials.UserName.Password = "*****";
                ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidationCallBack);

                //client ClientCredentials @ Application level
                userinfo.userid = "myusername";
                userinfo.password = "*****";
                GetHelloWorldAPIVersionRequest request = new GetHelloWorldAPIVersionRequest();

                APIVersionInfo versioninfo = new APIVersionInfo();
                versioninfo.userinfo = userinfo;
                request.APIVersionInfo = versioninfo;


                APIVersionInfoResponse response = client.GetHelloWorldAPIVersion(versioninfo);
                Console.WriteLine(response.Version);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.ReadLine();
        }
     }
  } 

Ich bin immer folgende exception:

System.ServiceModel.Sicherheit.MessageSecurityException: HTTP
- Anforderung ist nicht autorisierte mit client-Authentifizierungsschema "Anonym".
Der authentication header vom server empfangen wurde 'Basic
realm="EJBServiceEndpointServlet Reich"'. --->
System.Net.WebException: Der Remoteserver hat einen Fehler zurückgegeben: (401)
Unberechtigte.

EDIT: vom client habe ich überprüft mit Fiddler die request-Fenster, wie unten:
aus der AUth-tab es ist zu sagen, dass es keine Autherization Header vorhanden.

verbrauchen webservice mittels https-Protokoll

Fiddler Raw Anfrage wie folgt:

CONNECT 10.10.10.110:8001 
HTTP/1.1 Host: 10.10.10.110:8001 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

jede Hilfe, die möglichen sehr geschätzt.

  • Können Sie bestätigen, dass auf dem server, der die Anfrage kommt, wie HTTPS? Vielleicht mit Fiddler, können Sie extrahieren Sie die eigentliche Nachricht gesendet.
  • Vielen Dank für Ihre Antwort,von der client-Seite habe ich versucht mit fiddler , ich bin immer Fehler 401.bitte siehe meinen bearbeiteten post.
  • Also wenn ich das richtig verstehe haben wir klar, dass dies ein client problem? Dass die Regeln aus der server-Seite.
  • Okay, Danke,so, jetzt könnte Sie bitte führe mich bei der Lösung dieses Problems.
  • Wenn ich die Antwort wusste, ich würde auf jeden Fall posten. WCF ist so schwer zu diagnostizieren. Wenn ich noch etwas Zeit übrig haben, ich werde in diesem tiefer.
  • Danke somuch.wenn Sie keine Ahnung hat bitte nicht vergessen zu beantworten, danke.
  • Da sind Sie mit "TransaportWithMessageCredentials" sollten Ihre security-element so etwas wie dieses : <security mode="Message"> <message clientCredentialType="UserName"/> </Sicherheits - >
  • wenn ich, dass es wirft dann die exception : The provided URI scheme 'https' is invalid; expected 'http'.
  • Da könnten Sie den Zugriff auf den service von SOAPUI kann man vergleichen die raw-Anfrage von SOAPUI mit, dass Ihre client-Anwendung mit Fiddler
  • Vielen Dank für Ihre Antwort.ich brauche, um zu überprüfen, dass, ich werde das überprüfen und lassen Sie wissen.
  • Haben Sie demo-server-side-code?

Schreibe einen Kommentar