2010-01-08 4 views
3

Une application que j'écris doit utiliser .Net Remoting (je suis conscient que WCF est la «nouvelle chose», mais ce n'est malheureusement pas une option disponible pour nous en ce moment).Comment utiliser .Net Remoting via un proxy Web?

Quoi qu'il en soit, tout fonctionne bien si je n'essaie pas d'utiliser l'application via un proxy. Cependant, l'application doit pouvoir fonctionner via des serveurs Web proxy. J'ai mis en place un HttpChannel et place les propriétés 'proxyName' et 'proxyPort' à leurs valeurs correctes. Cela permet au canal d'utiliser le serveur proxy sans problème.

J'ai les problèmes suivants:

1: Si le serveur proxy requiert une authentification, il semble y avoir aucun moyen de définir les informations d'identification du canal doit utiliser pour auth avec le proxy. J'ai essayé à la fois la propriété 'credentials' et les propriétés 'username' et 'password', mais cela ne semble pas fonctionner. Donc, le résultat final dans un cas où le serveur proxy nécessite une authentification, et renvoie juste une erreur d'authentification à chaque fois que la méthode à distance est appelée.

2: Je ne peux pas sembler obtenir le HttpChannel d'utiliser le proxy Web par défaut du système. Si Internet Explorer est configuré pour utiliser un proxy, je devrais pouvoir utiliser WebRequest.GetSystemWebProxy() pour l'obtenir. Cependant, ceci renvoie un IWebProxy, et je ne peux pas extraire l'hôte et le port de ceci. Si quelqu'un connaît un moyen de le faire, je l'apprécierais grandement.

Il est frustrant que si vous entrez dans le code en utilisant Visual Studio et examinez la classe HttpChannel, il y a un objet WebProxy. La vie serait tellement plus facile s'ils donnaient accès à ça! Donc, fondamentalement, ce que je demande, c'est comment diable puis-je obtenir un HttpChannel pour utiliser un proxy web correctement? En gardant à l'esprit que je dois pouvoir utiliser un proxy qui nécessite une authentification, et la possibilité d'auto- détecter les paramètres de proxy Internet Explorer? Existe-t-il un moyen plus simple d'instancier le canal afin que je puisse simplement lui passer un objet proxy en tant que paramètre?

Toute aide est très appréciée!

Répondre

3

J'ai trouvé la solution à ce problème (malheureusement j'ai perdu l'adresse du blog qui m'a amené à cela - si je peux le trouver à nouveau je donnerai le crédit en raison), et il fonctionne parfaitement. Pour tous ceux qui sont intéressés, ajoutez le code suivant:

private static void SetChannelProxy(HttpClientChannel channel, IWebProxy proxy) 
    { 
     FieldInfo proxyObjectFieldInfo = typeof(HttpClientChannel).GetField("_proxyObject", BindingFlags.Instance | BindingFlags.NonPublic); 

     proxyObjectFieldInfo.SetValue(channel, proxy); 
    } 

Vous devez d'abord configurer votre objet proxy à l'aide des informations d'identification que vous souhaitez utiliser, puis appeler cette méthode avec le canal que vous souhaitez utiliser avec le proxy.