Нажав на путь по умолчанию RSS или ATOM из WCF, только клиент

Я пытаюсь написать простую оболочку 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 ответа

Я думаю, что есть способ сделать это, используя 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 делает то, что вам нужно.

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

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

Другие вопросы по тегам