2010-03-26 6 views
0

J'ai arrêté le site Web dans IIS, fait une modification dans Web.config, mais la fichue chose continue à écrire mes événements de journal dans ma base de données! La seule solution que j'ai trouvée est de redémarrer complètement IIS. Ce n'est pas une très bonne solution parce que tous mes sites web doivent alors s'arrêter/redémarrer.Comment arrêter un service Web WCF?

MISE À JOUR

Je l'ai fait quelques recherches et trouvé le ServiceFactory que le service utilise. Voici toute la classe.

/// <summary> 
/// Derive from this class to create a duplex Service Factory to use in an .svc file 
/// </summary> 
/// <typeparam name="T">The Duplex Service type (typically derived from DuplexService)</typeparam> 
public abstract class DuplexServiceFactory<T> : ServiceHostFactoryBase where T : IUniversalDuplexContract, new() 
{ 
    T serviceInstance = new T(); 

    /// <summary> 
    /// This method is called by WCF when it needs to construct the service. 
    /// Typically this should not be overridden further. 
    /// </summary> 
    public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses) 
    { 
     ServiceHost service = new ServiceHost(serviceInstance, baseAddresses[ 0 ]); 
     CustomBinding binding = new CustomBinding(
           new PollingDuplexBindingElement(), 
           new BinaryMessageEncodingBindingElement(), 
           new HttpTransportBindingElement() 
           ); 

     service.Description.Behaviors.Add(new ServiceMetadataBehavior()); 
     service.AddServiceEndpoint(typeof(IUniversalDuplexContract), binding, ""); 
     service.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex"); 
     return service; 
    } 
} 

Ce juste retourne une nouvelle instance de service, mais quant à savoir qui effectue l'appel, je ne sais pas. Mon fichier SVC pointe vers cette classe comme usine. La piste se termine ici, mais je ne comprends pas où se déroule tout le processus.

Répondre

0

De quel processus votre service Web WCF s'exécute-t-il? Êtes-vous sûr que c'est IIS? Serait-ce autre chose? WCF peut fonctionner dans de nombreux processus différents. Vous devrez déterminer dans quel processus il se trouve (il ne s'agit pas forcément d'IIS) et tuer ce processus pour l'arrêter.

+0

Est-ce que IIS s'exécute dans de nombreux processus ou domaines d'application? – kenny

+0

J'ai un client Silverlight qui se connecte via la messagerie Duplex. J'ai supposé que les instances de service Web sont connectées au site Web. Comment puis-je détecter le processus sous lequel le service fonctionne? Est-il possible de changer le processus aussi? – Matt

+0

@Matt: les services WCF peuvent être auto-hébergés. Ils peuvent fonctionner dans presque n'importe quel type de processus. Vous devrez savoir si le service est hébergé dans IIS ou dans un processus séparé, peut-être dans un service Windows. –