Нажатие на путь 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/, но это не так t работает для других каналов, например http://weblogs.asp.net/scottgu/atom.aspx, который меняется на http://weblogs.asp.net/scottgu/atom.aspx/


person bendewey    schedule 16.12.2008    source источник


Ответы (2)


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

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

person Brian    schedule 16.12.2008
comment
Хромой, но я думаю, что вы можете обрезать последнюю часть Uri и поместить ее в UriTemplate, например Ури (http ... scottgu), WebGet (UriTemplate = atom.aspx) - person Brian; 17.12.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 делает то, что вам нужно.

person Brian    schedule 17.12.2008