3 Stimmen

Die Erstellung eines WCF ServiceHost-Objekts dauert auf manchen PCs drei bis vier Minuten

Ich habe einen WCF-Dienst erstellt, der die app.config nicht zur Selbstkonfiguration verwendet. Auf manchen PCs dauert es jedoch drei bis vier Minuten, um das ServiceHost-Objekt zu erstellen. In der Annahme, dass mit meinem Dienst etwas nicht stimmt, habe ich einen einfachen "Hello, World"-Dienst erstellt und ihn damit ausprobiert. Ich habe das gleiche Problem.

Dem Profiler zufolge wird die gesamte Zeit damit verbracht, die Konfiguration des Dienstes einzulesen.

Ich habe also eigentlich zwei Fragen.

  1. Ist es möglich, das Lesen der Konfiguration aus der XML-Datei zu deaktivieren?

  2. Was noch wichtiger ist: Hat jemand eine Ahnung, warum dies so viel Zeit in Anspruch nehmen könnte?

Hier ein Beispiel für einen Dienst:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    string GetString();
}

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class MyService : IMyService
{
    public string GetString()
    {
        return "Hello, world!";
    }
}

class Program
{
    static void Main(string[] args)
    {
        Uri epAddress = new Uri("http://localhost:8731/Test");
        Uri[] uris = new Uri[] { epAddress };

        MyService srv = new MyService();
        ServiceHost host = new ServiceHost(srv, uris);  // this line takes 3-4 minutes

        host.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding(), "Test");
        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.HttpGetEnabled = true;
        host.Description.Behaviors.Add(smb);

        host.Open();

        return;
    }
}

Ich muss aus Designgründen den Dienst erstellen und ihn als Objekt übergeben, anstatt ihn als Typ zu übergeben.

Wenn Sie weitere nützliche Informationen haben, lassen Sie es mich bitte wissen.

Vielen Dank!

1voto

Vitaliy Punkte 7826

Ist der Server mit dem Internet verbunden?

Wenn nicht, versuchen Sie Folgendes:

  1. Internet Explorer öffnen
  2. Extras -> Internetoptionen -> Registerkarte "Erweitert
  3. Scrollen Sie nach unten zu Sicherheit und deaktivieren Sie "Auf Widerruf des Herausgeberzertifikats prüfen". und 'Auf Signaturen bei heruntergeladenen Programmen prüfen'.

In einigen Fällen beschleunigt dies viele scheinbar nicht zusammenhängende Prozesse auf Ihrem PC, einschließlich der Kommunikation und der Startgeschwindigkeit verschiedener ms-Programme (insbesondere Visual Studio).

0voto

marc_s Punkte 701497
  1. Ist es möglich, das Lesen der Konfiguration aus der XML-Datei zu deaktivieren?

Nein - aber Sie können immer entweder einfach die app.config-Datei löschen, wenn Sie selbst hosten, oder einfach nicht die <system.serviceModel> Abschnitt in Ihrer app.config/web.config.

  1. Was noch wichtiger ist: Hat jemand eine Ahnung, warum dies so viel Zeit in Anspruch nimmt?

Nein, ich weiß nicht - aber ich sehe, dass Sie die Standard-wsHttpBinding verwenden.

Frage ist: verhält sich dies das gleiche mit allen Bindungen? wsHttpBinding ist eine ziemlich schwergewichtige Bindung mit Unterstützung für viele Funktionen.

Sehen Sie den gleichen Zeitaufwand, wenn Sie z. B. die basicHttpBinding oder die netTcpBinding ??

Marc

0voto

Shiraz Bhaiji Punkte 62129

Wenn etwas ohne ersichtlichen Grund sehr lange dauert, liegt das oft daran, dass eine Sperre vorliegt und auf eine Zeitüberschreitung gewartet wird.

Ich vermute, dass es etwas mit Port 8731 zu tun hat.

  • Haben Sie noch etwas anderes, das auf diesem Port abgehört wird?
  • Haben Sie eine Firewall, die Ihnen Probleme bereiten könnte?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X