2011-03-27 4 views
2

Je n'ai trouvé rien sur le support wcf sur monotouch. J'ai besoin de créer un service web pour iPhone avec authentification de l'utilisateur. J'aimerais utiliser wshttpbinding.Monotouch WCF (wshttpbinding)

Est-ce que monotouch prend en charge wcf wshttpbinding? Sinon, comment puis-je créer un service Web avec authentification, côté serveur sur les veuves (C#), côté client sur iphone (MonoTouch)

Un grand merci

+0

Si le service Web est basé sur un serveur, pourquoi avez-vous besoin de la même chose sur le client? –

Répondre

5

Mono ne supporte actuellement pas WSHttpBinding, c'est un travail en cours, et le support est très inégal.

Vous pouvez utiliser SOAP ordinaire sur HTTPS (la pile de services Web à partir de .NET 1.0 et .NET 2.0). Mais comme vous ne faites que commencer, vous pouvez aussi bien utiliser les services REST avec des valeurs de retour JSon ou XML. Beaucoup de gens utilisent maintenant Json comme lingua-franca pour ce type de connexions, car il a l'avantage supplémentaire que vous pouvez utiliser le même pont pour créer des applications basées sur HTML que la sortie JSON peut être alimentée directement dans votre javascript sur les navigateurs.

Pour le serveur, vous pouvez utiliser quelque chose comme ServiceStack:

http://www.servicestack.net

Pour le client, vous pouvez analyser le Json manuellement à l'aide System.Json qui est un très bas niveau et de la pile barebones, ou vous pouvez utiliser quelque chose comme l'analyseur Json de Newtonsoft qui est livré avec un désérialiseur complet et un mappeur d'objet.

0

Je suggère de créer vos services web avec asp mvc et donner comme un fichier XML que vous pouvez analyser avec monotouch. vous pouvez atttack votre webService créé à partir de l'ASP en obtenant un flux XML

4

Dans la nouvelle version de Monotouch, cela fonctionne. Vous devez générer une classe WCF en utilisant le SDK Silverlight 4.0 qui sera sur votre PC Windows si vous avez Visual Studio.

Voici ce que j'utilise pour générer ma classe de feuille de temps (exécuter en shell CMD dans Windows):

slsvcutil.exe http://localhost/QQQQQ/Timesheet.svc?wsdl /namespace:"*,General" /d:z:\desktop /noConfig /ser:DataContractSerializer 

Copiez ensuite ce à votre projet MonoTouch et l'appeler comme ceci:

BasicHttpBinding binding = new BasicHttpBinding (settings.WCFBasicHttpSecurityMode()); 
var svc = new TimesheetServiceClient (binding, new EndpointAddress (settings.AddressServiceUrl())); 

Remarque que tous les appels de service sont uniquement asynchrones. Vous devez vous abonner à leurs appels d'événements dos comme ceci:

svc.GetTimesheetsCompleted += GetTimeSheetsComplete; 
+0

J'ai une question comment vous définissez les informations d'identification lors de l'exécution du service sur HTTPS avec une certaine authentification. ET quand j'essaye votre solution je reçois «les classes dans le module ne peuvent pas être chargées» au démarrage de l'application. – Scarlaxx

+0

Je reçois "Content Type text/xml; charset = utf-8 n'était pas supporté par le service" quand j'ai essayé cette méthode :-) – clement

1

Je suis en train de mettre en œuvre WCF dans MonoDroid, aussi. Je pense qu'il n'y a pas de grande différence avec MonoTouch. Et après avoir fait des recherches, je ne trouve pas le supoort pour tout autre mode de liaison WCF sauf BasicHttpBinding. Honnêtement, je ne suis pas bon du tout à la WCF, alors j'ai juste essayé des manières au hasard. Je peux obtenir des messages du serveur avec la chaîne et l'octet [] et ainsi de suite, mais quand je voulais télécharger de grandes données par exemple. image ou audio, le message téléchargé qui inclut le gros octet [] doit être limité sous 8192 octets. Cela provoque mon téléchargement en échec.

Maintenant, je dois penser à une autre façon de résoudre le téléchargement de gros fichiers à partir d'un téléphone mobile.

Et c'est vraiment un gros dommage et un problème de ne pas faire toutes les actions réalisées totalement dans le codage WCF.

Hope Mono l'améliore. et si n'importe quelle aide bienvenue et appréciée.

Questions connexes