我正在尝试编写一个简单的WCF Wrapper来将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;
}
问题问题是该服务正在将方法名称附加到网址(即上面的网址会调用http://channel9.msdn.com/Feeds/RSS/GetFeed),因为我希望将其扩展到任何网址feed我并不总是知道Feed的名称。是否有我可以指定的属性或属性将使用默认端点地址而不是附加方法名称?
更新添加[WebGet(UriTemplate =“”)]只能让我成为其中的一部分。它适用于http://channel9.msdn.com/Feeds/RSS,将其更改为http://channel9.msdn.com/Feeds/RSS/,但它不适用于http://weblogs.asp.net/scottgu/atom.aspx之类的其他Feed,后者会更改为http://weblogs.asp.net/scottgu/atom.aspx/
答案 0 :(得分:0)
我认为将WebGetAttribute上的UriTemplate更改为空字符串就可以了。
http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webgetattribute.uritemplate.aspx
答案 1 :(得分:0)
我认为有一种方法可以使用OperationContext / WebOperationContext来实现。我忘记了确切的细节,但请参阅例如此示例在通道
上创建OperationContextScopehttp://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做你需要的。