2008-12-16 7 views
0

J'essaye d'écrire un Wrapper WCF simple pour charger un flux de syndication en tant que client.Obtention d'un chemin RSS ou ATOM par défaut à partir de WCF, Client uniquement

contrat

[ServiceContract] 
public interface IFeedService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate="")] 
    SyndicationFeed GetFeed(); 
} 

Utilisation

using (var cf = new WebChannelFactory<IFeedService>(new Uri("http://channel9.msdn.com/Feeds/RSS"))) 
{ 
    IFeedService s = cf.CreateChannel(); 
    this.FeedItemsList.DataSource = s.GetFeed().Items; 
} 

Question Le problème est que le service est l'ajout du nom de la méthode à l'URL (ie. L'adresse ci-dessus appellerait http://channel9.msdn.com/Feeds/RSS/GetFeed), et depuis Je veux que cela soit étendu à n'importe quel flux Je ne connais pas toujours le nom du flux. Y at-il un attribut ou une propriété que je peux spécifier qui utilisera l'adresse de point de terminaison par défaut au lieu d'ajouter un nom de méthode? L'ajout de [WebGet (UriTemplate = "")] ne m'apporte qu'une partie de ce chemin.

Mettre à jour Il travaille pour http://channel9.msdn.com/Feeds/RSS, il se transforme en http://channel9.msdn.com/Feeds/RSS/, mais il ne fonctionne pas pour d'autres aliments comme http://weblogs.asp.net/scottgu/atom.aspx qui se change à http://weblogs.asp.net/scottgu/atom.aspx/

Répondre

0

Je pense changer le UriTemplate sur WebGetAttribute à la chaîne vide va le faire.

http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webgetattribute.uritemplate.aspx

+0

voir la question mise à jour avec plus de problèmes – bendewey

+0

Lame, mais je pense que vous pouvez peut-être couper la dernière partie de l'Uri et le mettre dans le UriTemplate, par exemple. Uri ("http ... scottgu"), WebGet (UriTemplate = "atom.aspx") – Brian

+0

L'URL est une entrée utilisateur – bendewey

0

Je pense qu'il ya une façon de le faire en utilisant le OperationContext/WebOperationContext. J'oublie les détails exacts, mais voir par exemple cet exemple qui crée un OperationContextScope sur le canal

http://social.msdn.microsoft.com/forums/en-US/wcf/thread/8f9f276a-e13f-4d06-8c1e-0bb6abd8f5fe

auquel vous point peut accéder par exemple OperationContext.Current.OutgoingMessageProperties (peut-être définir le .Via à l'Uri souhaité), ou WebOperationContext.Current.OutgoingWebRequest si vous souhaitez définir, par exemple, les en-têtes HTTP ou la méthode '(verbe http). Je pense que peut-être piquer OperationContext.Current.OutgoingMessageProperties.Via fait ce que vous avez besoin.