2010-09-21 2 views
2

Où cette instruction va-t-elle? Est-ce que je le mets dans mon constructeur ou est-ce que je l'appelle dans une méthode chaque fois que je fais une requête asynchrone?Où placer WebRequest.RegisterPrefix()

+0

Êtes-vous sûr de l'avoir besoin? 'WebRequest.RegisterPrefix' est une fonctionnalité avancée rarement utilisée. Qu'essayez-vous de faire? – SLaks

+0

Je suis juste les docs MSDN sur comment appeler un service Web distant qui renvoie json. MSDN dit de le faire mais ne dit jamais où. –

+0

Je vois. Je n'ai jamais utilisé Silverlight, donc je n'étais pas au courant de cet usage. – SLaks

Répondre

6

Voici un exemple de discussion.

WebRequest.RegisterPrefix("http://xamlwonderland.com", 
     WebRequestCreator.ClientHttp); 

Maintenant que je l'ai appelé la méthode RegisterPrefix toutes les demandes de mise en réseau ultérieures à ce sous-domaine (blog.wpfwonderland.com) utilisera la pile réseau du client et non la pile du navigateur.

Vous pouvez appeler RegisterPrefix n'importe où dans votre code. Il n'y a pas de mal à appeler cette méthode plus d'une fois, mais selon le doc, vous ne pouvez le faire qu'une seule fois par domaine. En fait, votre application Silverlight pourrait avoir des appels réseau utilisant la pile du navigateur et d'autres utilisant la pile client. Supposons que vous souhaitiez que le trafic HTTPS utilise la pile du navigateur et que votre trafic HTTP soit le client. Chaque pile de mise en réseau vous offre différents avantages.

WebRequest.RegisterPrefix("http://":, WebRequestCreator.ClientHttp); 
WebRequest.RegisterPrefix("https://", WebRequestCreator.BrowserHttp); 
Par exemple, appeler les services REST est plus facile avec ClientHttp. Voici quelques détails:

How to: Specify Browser or Client HTTP Handling

+0

Que se passe-t-il si je ne spécifie pas RegisterPrefix puis génère une requête https comme suit: HttpWebRequest request = (HttpWebRequest) WebRequestCreator.ClientHttp.Create (new Uri (requestUrl)); – Fabii

+0

Je demande que je voie une Arg_NullReferenceException se produire en production, mais je suis incapable de le dupliquer. – Fabii

2

Vous devriez l'appeler exactement une fois, peut-être dans un constructeur statique.

1

Vous pouvez l'appeler dans votre Silverlight Applications événement de démarrage trouvé dans App.xaml.cs comme Application_Startup(object sender, StartupEventArgs e).