Переход на путь по умолчанию RSS или ATOM из WCF, только для клиентов - PullRequest
0 голосов
/ 16 декабря 2008

Я пытаюсь написать простую оболочку WCF для загрузки SyndicationFeed в качестве клиента.

Договор

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

Использование

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

Вопрос Проблема заключается в том, что служба добавляет имя метода к URL-адресу (т. Е. Приведенный выше URL-адрес вызовет http://channel9.msdn.com/Feeds/RSS/GetFeed),, и поскольку я хочу, чтобы это было распространено на любой канал не всегда знает имя канала. Можно ли указать атрибут или свойство, которое будет использовать адрес конечной точки по умолчанию вместо добавления имени метода?

Обновление Добавление [WebGet (UriTemplate = "")] только помогает мне в этом. Он работает для http://channel9.msdn.com/Feeds/RSS,, изменяет его на http://channel9.msdn.com/Feeds/RSS/,, но не работает для других каналов, таких как http://weblogs.asp.net/scottgu/atom.aspx, который изменяется на http://weblogs.asp.net/scottgu/atom.aspx/

Ответы [ 2 ]

0 голосов
/ 17 декабря 2008

Я думаю, что есть способ сделать это, используя OperationContext / WebOperationContext. Я забыл точные детали, но вижу, например, этот пример, который создает OperationContextScope на канале

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

в какой момент вы можете получить доступ, например, OperationContext.Current.OutgoingMessageProperties (может быть, установить .Via на желаемый Uri) или WebOperationContext.Current.OutgoingWebRequest, если вы хотите установить, скажем, заголовки HTTP или «метод» (глагол http). Я думаю, что, возможно, тыкая OperationContext.Current.OutgoingMessageProperties.Via делает то, что вам нужно.

0 голосов
/ 16 декабря 2008

Я думаю, что изменение UriTemplate на WebGetAttribute на пустую строку сделает это.

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

...