2009-10-05 6 views
3

Comment faire pour que mon service soit écrit avec WCF pour renvoyer un iCal? Les exemples que je vois utilisent xml ou json comme moyen de formater la réponse. Quel est le meilleur moyen de renvoyer d'autres types de corps de réponse?Service WCF pour renvoyer iCal

Répondre

1

La solution la plus simple serait de retourner la représentation iCal au format XML ou JSON (votre choix) comme une simple chaîne de votre appel WCF:

[ServiceContract] 
interface IMyCalService 
{ 
    [OperationContract] 
    string GetiCal(.......); 
} 

puis continuer et gérer davantage sur le client , une fois que vous avez reçu la chaîne contenant le code XML iCal (ou JSON). Cela peut être fait avec WCF standard en utilisant SOAP. D'autres façons de le faire pourrait être d'utiliser un service WCF REST qui renvoie une réponse au format iCal lorsque vous frappez une URL particulière - cela nécessiterait l'installation du WCF Rest Starter Kit pour le moment (dans .NET 3.0/3.5). Je ne suis pas intimement familier avec le format iCal, mais je suis sûr que d'une manière ou d'une autre, vous serez capable de construire le format XML nécessaire pour satisfaire aux exigences d'iCal.

Marc

3

Quelque chose comme ceci:

[WebGet(UriTemplate="{id}.ics")] 
[OperationContract] 
Stream GetCalendar(int id) 
{ 
    WebOperationContext.Current.OutgoingResponse.ContentType="text/calendar"; 

    //Now just return the appropriate data in iCal format in the Stream... 
} 

Vous pouvez maintenant faire une requête HTTP GET à, par exemple yourService.svc/123.ics et récupérez un iCal. La raison pour laquelle cela fonctionne est que "Stream" est spécial-cased dans WCF REST (utilisé pour les réponses non-XML, non-JSON). N'oubliez pas que vous devez utiliser à la fois le comportement WebHttpBinding et WebHttp pour que cela fonctionne.

+0

Une chance que vous pouvez développer sur la dernière phrase "N'oubliez pas que vous devez utiliser à la fois le comportement WebHttpBinding et WebHttp pour que cela fonctionne."? – Drammy

+0

Dans votre configuration de service, vous devez utiliser à la fois http://msdn.microsoft.com/en-us/library/bb412176.aspx et http://msdn.microsoft.com/en-us/library/bb924425.aspx –