Нажав на путь по умолчанию 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