Laden...

[erledigt] WCF-Verbindungsaufbau beschleunigen

Erstellt von dsdsfga vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.301 Views
D
dsdsfga Themenstarter:in
53 Beiträge seit 2011
vor 12 Jahren
[erledigt] WCF-Verbindungsaufbau beschleunigen

Hallo,

hat jemand einen recht allgemeinen Tipp für mich wie ich den WCF Verbindungsaufbau beschleuningen kann?
Mir ist aufgefallen das ein Verbindungsaufbau beim ersten Versuch bei mir immer etwa 7-8 Sekunden benötigt.
Wenn ich ein dummy Verbindungsaufbau ohne richtige Credentials mache dauert der folgende Login nur noch 1-3 Sekunden.
Wenn ich jetzt aber einen erfolgreichen Login bereits gemacht habe und den Server neustarte und der client einen reconnect macht dauert das login nur noch 1,3 Sekunden. Was in meinen Augen eine akzeptable Zeit ist. Wie kommt es das die Zeile die ich mir langsam markiert habe so lange beim ersten Aufruf braucht?

Zur verdeutlichung mein gekürzter Code:

Stopwatch sw = Stopwatch.StartNew();
[...]
ChannelFactory<IService> factory = new ChannelFactory<IService>(clientBinding, new EndpointAddress(serviceAddress.Uri));
factory.Credentials.UserName.UserName = username;
factory.Credentials.UserName.Password = password;

IService channel = factory.CreateChannel();

// Extra erst so spät, damit bis hier hin alle Assemblys geladen werden
if(username == null) throw new NullReferenceException("username");

Console.WriteLine("{0}ms calling version...", sw.ElapsedMilliseconds);

Console.WriteLine("Service-Version: " + channel.ServiceVersion.ToString()); // langsam

Console.WriteLine("{0}ms login ended.", sw.ElapsedMilliseconds);
G
538 Beiträge seit 2008
vor 12 Jahren

Es könnte sein, dass dein Service noch starten muss. Je nachdem ob die CLR geladen ist dauert das ein wenig.
Das Problem ist im übrigen nicht beschränkt auf Services sondern tritt bei .NET auch bei lokalen Applikationen und bei Webanwendungen auf.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

D
dsdsfga Themenstarter:in
53 Beiträge seit 2011
vor 12 Jahren

Ich bin mir dem bewust, desshalb lass ich den Service ja auch mit einem dummy Login "aufwärmen". Gibt es da noch bessere Tricks?

G
538 Beiträge seit 2008
vor 12 Jahren

Ich bin mir nicht sicher, aber CreateChannel öffnet glaube ich noch keine Verbindung zum Server.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo dsdsfga,

Grumbler85 hat recht. In der WCF ist alles "lazy", d.h. erst wenn es wirklich benötigt wird so wird es ausgeführt. So auch beim Verbindungsaufbau: erst wenn erstmal richtig eine Verbindung zum Server hergestellt werden soll, wird diese auch hergestellt.

Mir ist auch nix besseres bekannt als eine Dummy-Abfrage an den Server zu schicken. Diese kann aber auch gleich verwendet werden um den Verbindungsstatus zu prüfen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

D
dsdsfga Themenstarter:in
53 Beiträge seit 2011
vor 12 Jahren

Ich führe jetzt einfach einen login durch mit einem Dummy User der immer bei der Auth abgelehnt wird. Das Beschleunigt das ganze ein nettes Stück.

*Erledigt*