2011-01-08 4 views
0

Lorsque j'effectue des appels de service Web à partir de Silverlight à l'aide d'une référence de service, les objets SoapClient (générés) peuvent-ils modifier l'adresse sur laquelle ils appellent le service? En particulier, je voudrais ajouter une valeur QueryString à chaque appel effectué par le service. Donc, si jeModifier l'adresse de point de terminaison d'un proxy client WCF

DataService.SilverlightServiceSoapClient C = new DataService.SilverlightServiceSoapClient();

Est-il possible de faire quelque chose comme:

C.Address += "?Foo=Bar"; 

Ce qui me permettrait de, de mon WebMethod, dis:

HttpContext.Current.Request.QueryString["foo"];

Évidemment, je peux modifier mes WebMethods pour prendre cette valeur en paramètre, mais je voudrais éviter de le faire si possible.

Répondre

2

Étant donné que vous utilisez déjà des références de service, vous pouvez simplement utiliser la surcharge du constructeur de la classe proxy qui accepte une EndpointAddress en tant que paramètre. Vous pouvez également créer plusieurs configurations de point de terminaison et faire en sorte que le code utilise simplement la configuration choisie, ce qui peut inclure des modifications d'URL.

Voir Understanding Generated Client Code sur MSDN.

+0

Merci pour la réponse, mais je ne pense pas que je posais la question très clairement. I * am * utilise une référence de service pour appeler l'asmx, et le proxy généré n'a pas de propriété Uri. Il a la propriété C.Endpoint.Address.Uri, mais en essayant de modifier cela ne s'est pas bien passé. –

+0

Vous devez vraiment être plus clair. –

+0

Désolé. Être clair est généralement quelque chose que je ne suis pas terrible. Je pense que le problème était que la seule façon d'appeler un service asmx de Silverlight était d'utiliser une référence de service. Comment * pourriez-vous le faire? –

0

Il semble que la meilleure façon de le faire est d'utiliser simplement l'un des constructeurs surchargés et fournir les uri vous

C = new DataService.SilverlightServiceSoapClient(new BasicHttpBinding(), new System.ServiceModel.EndpointAddress("http://blah/blah/blah/SilverlightService.asmx?Foo=Bar")); 
+0

Et bien sûr stocker le Uri quelque part intelligent donc ce n'est pas seulement codé en dur dans votre constructeur ... –

Questions connexes