2011-09-21 4 views
1

J'ai un problème que j'espère que quelqu'un pourrait me conseiller.Dynmically consommer un service Web dans Monotouch

Je crée une application iPhone d'entreprise qui va capturer des informations et les écrire sur un serveur local. Selon le site sur lequel l'utilisateur se trouve, le type de serveur sur lequel l'information est écrite dépend du serveur.

J'ai créé un webservice que je peux consommer en monotouch et lui transmettre des informations qu'il va ensuite écrire dans une base de données SQL sur le serveur local. Le problème auquel je suis confronté est comment puis-je faire cela pour tous nos emplacements? Si je mets un service Web à chaque emplacement, chaque emplacement aura besoin de sa propre version de l'application qui écrit en utilisant leur service web (tous les serveurs sont sur le même réseau et ne sont pas séparés)

Puis-je consommer dynamiquement un service Web par passer l'URL pertinente?

Devrais-je adopter une autre approche?

Tout conseil serait apprécié.

Répondre

1

EDIT - Je devrais probablement mentionner que nous utilisons les services Web de type WCF qui nécessitent des liaisons généré avec SISvcUtil.exe (c'est de là que provient la classe WebServiceClient).

Nous faisons quelque chose de similaire où nous avons un serveur de test et un serveur de production et il est simple de changer l'URL vers laquelle pointe le service Web. Évidemment, cela suppose que le service Web hébergé à tous les emplacements différents sont les mêmes ...

Lors de la création de l'objet Client qui consomme le service Web, vous devez spécifier des liaisons et une adresse de point de terminaison, vous pouvez simplement modifier la chaîne d'extrémité de point de terminaison pour pointer sur le serveur approprié. Le code ci-dessous devrait vous donner une idée de la façon de le faire ...

BasicHttpBinding binding = new BasicHttpBinding(); 
binding.OpenTimeout = new TimeSpan(0,1,0); 
binding.CloseTimeout = new TimeSpan(0,1,0); 
binding.SendTimeout = new TimeSpan(0,1,0); 
//snip - any other bindings you need to specify... 

string fullDomain; 
string domain; 

if (local) 
    domain = "local.server.com"; 
else 
    domain = "production.server.com"; 

fullDomain = string.Format("https://{0}/WebService/Service.svc", domain); 

EndpointAddress endpointAddress = new EndpointAddress(fullDomain); 

WebServiceClient client = new WebServiceClient(binding, endpointAddress); 
+0

cet exemple est-il utilisé en monotouch? Je ne peux pas trouver une référence à WebServiceClient? – JonBull2013

+0

Voir mon édition - il devrait donner plus de contexte. Je suppose que vous utilisez les services Web .NET traditionnels? – Luke

0

Oui. Il doit exister un constructeur ou une propriété Url que vous pouvez définir, ce qui vous permet de transmettre l'URL à vos différents points de terminaison de service lors de l'exécution.

(je suppose ici que vous parlez plusieurs instances du même service Web hébergé à différentes URL)

Questions connexes