Création d'un objet ServiceHost WCF prend trois à quatre minutes sur certains PC

StackOverflow https://stackoverflow.com/questions/1577730

  •  21-09-2019
  •  | 
  •  

Question

J'ai créé un service WCF qui n'utilise pas le app.config pour se configurer. Cependant, il faut trois à quatre minutes sur certains PC pour construire l'objet ServiceHost. Pensant qu'il y avait quelque chose de mal avec mon service, je construisais simple Bonjour, le service mondial et essayé avec cela. J'ai le même problème.

Selon le profileur, tout ce temps est consacré à la lecture dans la configuration pour le service.

J'ai donc deux questions vraiment.

  1. Est-il possible de désactiver la lecture de la configuration XML?

  2. Plus important encore, ce que quelqu'un a une idée pourquoi cela pourrait prendre une telle quantité excessive de temps?

Voici le service exemple:

[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;
    }
}

J'ai besoin pour des raisons de conception pour créer le service et le transmettre en tant qu'objet, plutôt que de passer en tant que type.

S'il y a plus d'informations qui peuvent être utiles, s'il vous plaît laissez-moi savoir.

Merci.

Était-ce utile?

La solution

Le serveur est connecté à Internet?

Sinon, procédez comme suit:

  1. Ouvrez Internet Explorer
  2. Outils -> Options Internet -> Onglet Avancé
  3. Faites défiler vers le bas pour la sécurité et la désactiver « Vérifier la révocation du certificat de l'éditeur » et « Vérifier les signatures des programmes téléchargés »

Dans certains cas, faire ce qui accélère beaucoup de processus apparemment sans rapport sur votre PC, y compris la communication et de la vitesse de démarrage des différents programmes de ms (en particulier Visual Studio).

Autres conseils

  
    
        
  1. Est-il possible de désactiver la lecture config à partir du XML?
  2.     
  

Non -. Mais vous pouvez toujours soit simplement supprimer le fichier app.config si vous êtes auto-hébergement, ou tout simplement pas la section <system.serviceModel> dans votre app.config / web.config

  
    
        
  1. Plus important encore, ce que quelqu'un a une idée pourquoi cela pourrait prendre une telle quantité excessive de temps?
  2.     
  

Non, je ne suis pas - mais je vois que vous utilisez le wsHttpBinding par défaut

.

Question est: ce que cela comporte la même chose avec toutes les liaisons? wsHttpBinding est un peu contraignant poids lourd avec prise en charge de nombreuses fonctionnalités.

Voyez-vous la même quantité de temps passé par exemple lors de l'utilisation le basicHttpBinding ou le netTcpBinding ??

Marc

Si quelque chose prend beaucoup de temps, sans raison apparente, il est souvent qu'il ya un certain blocage et il est en attente d'un délai d'attente.

Je suppose qu'il est quelque chose à voir avec le port 8731.

  • Avez-vous quoi que ce soit d'autre écoute sur ce port?
  • Avez-vous un pare-feu qui pourrait être vous donner des problèmes?
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top