2010-06-18 6 views
0

J'ai donc un service Web central chargé de la gestion d'autres services. Ces services s'inscrivent dans le WS principal avec leur URL, menant à leur propre service web.Appel de méthodes de service Web à l'aide d'URL

Ce que je dois faire maintenant, c'est appeler les services Web enfants à partir du service Web central. J'ai cherché google sur la façon de le faire, mais tout ce que je pouvais trouver était this.

Je voudrais enregistrer n'importe quel service Web et ne pas créer une référence Web, comme suggéré dans la solution que j'ai trouvée.

Comment cela se fait-il sans utiliser de référence Web?

Répondre

0

Alka,

si vous utilisez webservices, autres que WCF, vous pouvez modifier l'URL du webservice vous allez dans le web.config, vous pouvez également modifier dans le code via l'URL de votre Procuration.

par exemple

var testuri = "http://a_web_server/PostCode1/PostCodeWebService.asmx"; 
proxy.Url = testuri; 

Vous pouvez aussi créer votre propre proxy webservice et gérer la redirection de webservice à partir de là.

+0

Merci pour la réponse rapide. Bien que je suis toujours confus à ce sujet - dois-je créer une référence Web aux services pour faire ce que vous avez dit? – Alka

+0

vous feriez avec la solution ci-dessus, si vous regardez le code de référence web, vous trouverez un fichier appelé reference.cs qui est le code que le webservice utilise, si vous voulez créer votre propre proxy webservice c'est un bon point de départ . – Iain

0

Vous pourriez probablement ajouter une référence Web lors du développement (cela permettra à Visual Studio de découvrir le service Web et d'avoir un Intellisense fonctionnel).

Cependant, dans votre code, vous pouvez créer l'objet dynamiquement.

Dites que vous devez utiliser un objet appelé TestSoapClient pour accéder à votre service Web. Si vous voulez créer avec l'URL de la référence Web, vous suffit de faire

TestSoapClient testSoapClient = new TestSoapClient(); 

Ce code serait utiliser l'URL par défaut (à savoir l'un que vous l'avez fait quand vous avez ajouté votre référence Web).

Si vous voulez créer l'objet TestSoapClient dynamiquement en utilisant une URL que vous spécifiez lors de l'exécution, rendez-vous avec quelque chose comme ceci:

 XmlDictionaryReaderQuotas readerQuotas = new XmlDictionaryReaderQuotas(); 
     readerQuotas.MaxDepth = 32; 
     readerQuotas.MaxStringContentLength = 8192; 
     readerQuotas.MaxArrayLength = 16384; 
     readerQuotas.MaxBytesPerRead = 4096; 
     readerQuotas.MaxNameTableCharCount = 16384; 

     BasicHttpBinding basicHttpBinding = new BasicHttpBinding(); 
     basicHttpBinding.Name = BindingName; 
     basicHttpBinding.CloseTimeout = new TimeSpan(0, 1, 0); 
     basicHttpBinding.OpenTimeout = new TimeSpan(0, 1, 0); 
     basicHttpBinding.ReceiveTimeout = new TimeSpan(0, 10, 0); 
     basicHttpBinding.SendTimeout = new TimeSpan(0, 1, 0); 
     basicHttpBinding.AllowCookies = false; 
     basicHttpBinding.BypassProxyOnLocal = false; 
     basicHttpBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; 
     basicHttpBinding.MaxBufferSize = 65536; 
     basicHttpBinding.MaxBufferPoolSize = 524288; 
     basicHttpBinding.MaxReceivedMessageSize = 65536; 
     basicHttpBinding.MessageEncoding = WSMessageEncoding.Text; 
     basicHttpBinding.TextEncoding = Encoding.UTF8; 
     basicHttpBinding.TransferMode = TransferMode.Buffered; 
     basicHttpBinding.UseDefaultWebProxy = true; 
     basicHttpBinding.ReaderQuotas = readerQuotas; 
     basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm; 
     basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 

     EndpointAddress endpointAddress = new EndpointAddress("YourDynamicUrl"); 

     TestSoapClient testSoapClient = new TestSoapClient(basicHttpBinding, endpointAddress); 

De cette façon, la valeur de l'URL de référence Web et les valeurs dans la configuration le fichier ne sera pas utilisé lors de l'exécution.

0

Ok, problème résolu.

Ma solution à cela était d'utiliser une référence Web et de changer l'URL du proxy au service que je veux. De cette façon, je peux accéder dynamiquement à mes services Web.

Merci pour vos réponses.

Questions connexes