Ich habe einen WebApi selbst gehosteten Konsolenserver über SSL.Consumer WebApi Self Host über SSL/TLS
Der Server kümmert sich um die Erstellung der SSL-Zertifikate, fügt sie zum Zertifikatsspeicher hinzu und bindet das Zertifikat unter Verwendung von netsh on the fly an den Port.
Der Server verfügt über einen einfachen Controller, der die Zeichenfolge "Hello World" über HTTP GET zurückgibt.
ich es über den Browser ohne Probleme zugreifen können, und ich bin ganz sicher, dass es nichts falsch mit dem Server-Code ist so bin ich nur den unruhigen Client-Code geht hier posten.
private static string url = @"https://localhost:4443/WebApi/Service/HelloWorld;
private static async Task GetHelloWorldRequest(string url)
{
using (HttpClient httpClient = new HttpClient(GetSSLHandler()))
{
HttpRequestMessage request = new HttpRequestMessage();
request.Method = HttpMethod.Get;
request.RequestUri = new Uri(url);
await httpClient
.SendAsync(request)
.ContinueWith((response)
=>
{
try
{
ProcessResponse(response);
}
catch (AggregateException agException)
{
throw new Exception("Error getting response: " + agException.Message);
}
}).ConfigureAwait(false);
}
}
private static void ProcessResponse(Task<HttpResponseMessage> response)
{
Console.WriteLine(response.Result.Content.ReadAsStringAsync().Result);
}
private static void ProcessResponseHeaders(Task<HttpResponseMessage> response)
{
Console.WriteLine(response.Result.Headers.ToString());
}
private static WebRequestHandler GetSSLHandler()
{
WebRequestHandler handler = new WebRequestHandler();
X509Certificate2 certificate = GetMyX509Certificate();
handler.ClientCertificates.Add(certificate);
return handler;
}
Jetzt in meiner Hauptroutine ich dies einfach anrufen:
Console.WriteLine("Response headers:");
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Task task = GetHelloWorldRequest(url);
task.Wait();
Nun mein Problem, wenn ich versuche, den Antwortinhalt zu lesen, die ich „Hallo Welt“ geben soll es gibt mir eine leere Zeichenfolge stattdessen.
Also versuchte ich die Antwort-Header suchen, und das ist, was ich bekommen:
Es es zu sein scheint durch die Verhandlungsphase gehen und ich weiß nicht, was hier zu tun .
Bitte um Rat. Vielen Dank im Voraus.
EDIT:
Leider ist das Problem mit dem Server-Code. Entkomme einfach den Abschnitt, der httpBinding.ConfigureTransportBindingElement aufruft.
class SslHttpsSelfHostConfiguration : HttpSelfHostConfiguration
{
public SslHttpsSelfHostConfiguration(string baseAddress) : base(baseAddress) { }
public SslHttpsSelfHostConfiguration(Uri baseAddress) : base(baseAddress) { }
protected override BindingParameterCollection OnConfigureBinding(HttpBinding httpBinding)
{
httpBinding.Security.Mode = HttpBindingSecurityMode.Transport;
/*
httpBinding.ConfigureTransportBindingElement = (element =>
element.AuthenticationScheme =
AuthenticationSchemes.Negotiate);
*/
return base.OnConfigureBinding(httpBinding);
}
}
@schatchz ändern, sorry, aber ich bin immer noch eine leere Zeichenfolge statt "Hallo Welt" – superfly71
@schlatchz, versuchte die Bearbeitung immer, aber immer noch kein Glück; ( – superfly71
Das ist wirklich komisch ... Ich habe dies mit SSL-Servern getan und es hat funktioniert .. Können Sie bitte Ihren Server-Code hinzufügen? Speziell, wie Sie die Methode implementieren? – shlatchz