Question

Les « fins » mandat de tous les RFC de RFCs client qu'ils prennent garde de ne pas utiliser plus de 2 connexions par hôte ...

Microsoft a implémenté ce dans WebClient. Je sais qu'il peut être désactivé avec

App.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
 <system.net> 
  <connectionManagement> 
   <add address="*" maxconnection="100" /> 
  </connectionManagement> 
 </system.net> 
</configuration> 

(trouvé sur http : //social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/1f863f20-09f9-49a5-8eee-17a89b591007 )

Mais comment puis-je le faire par programme?

accordin à http://msdn.microsoft.com/en-us /library/system.net.servicepointmanager.defaultconnectionlimit.aspx

"modification de la propriété DefaultConnectionLimit n'a pas d'effet sur les existants objets ServicePoint; elle affecte uniquement les objets qui sont ServicePoint initialisé après le changement. Si la valeur de cette propriété n'a pas été fixer directement ou par configuration, la valeur par défaut à la DefaultPersistentConnectionLimit constante. "

Je voudrais mieux configurer la limite quand j'instancier WebClient, mais juste suppression de cette limitation triste programme au début de mon programm serait bien aussi.

Le serveur I accès n'est pas un serveur web régulier dans Internet, mais sous mon contrôle et dans le réseau local. Je veux faire API appels, mais je ne l'utilise webservices ou Remoting

Était-ce utile?

La solution

Avec quelques conseils d'ici et d'ailleurs j'ai réussi à résoudre ce problème dans ma demande en remplaçant la classe WebClient j'utilisais:

class AwesomeWebClient : WebClient {
    protected override WebRequest GetWebRequest(Uri address) {
        HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(address);
        req.ServicePoint.ConnectionLimit = 10;
        return (WebRequest)req;
    }
}

Autres conseils

pour les personnes intéressées:

System.Net.ServicePointManager.DefaultConnectionLimit = x (où x représente le nombre souhaité de connexions)

pas besoin de références supplémentaires

juste assurez-vous que cela est appelé avant le point de service est créé comme mentionné ci-dessus dans le poste.

Cette solution vous permet de modifier la limite de connexion à tout moment :

private static void ConfigureServicePoint(Uri uri)
{
    var servicePoint = ServicePointManager.FindServicePoint(uri);

    // Increase the number of TCP connections from the default (2)
    servicePoint.ConnectionLimit = 40;
}

La toute personne 1ère fois appelle cette FindServicePoint , a ServicePoint instance est créée et WeakReference est créé pour tenir à l'intérieur de la ServicePointManager . Les demandes suivantes au gestionnaire pour le même Uri renvoient la même instance. Si la connexion n'est pas utilisé après, le GC nettoie vers le haut.

Si vous trouvez l'objet ServicePoint utilisé par votre WebClient, vous pouvez modifier sa limite de connexion. objets HttpWebRequest ont un accesseur pour récupérer celui qu'ils ont été construits à utiliser, vous pouvez donc le faire de cette façon. Si vous êtes chanceux, toutes vos demandes pourraient finir par partager la même ServicePoint si vous souhaitez que devez le faire une fois.

Je ne sais pas d'aucune façon globale pour changer la limite. Si vous avez modifié l'DefaultConnectionLimit assez tôt dans l'exécution, vous seriez probablement bien.

Alternativement, vous pouvez simplement vivre avec la limite de connexion, étant donné que la plupart des logiciels de serveur va vous étrangler de toute façon. :)

Nous avons une situation en ce qui concerne la pièce au-dessus de la configuration dans App.Config                       

Pour que cela soit valide dans une application console, nous avons ajouté la dll de référence System.Configuration. Sans la référence, ce qui précède était inutile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top