微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DotText实现支持自动发现服务接口

目标:使用Live Writer添加Dottext Blog帐号时支持自动发现webservice接口。实现后的添加只要一个步骤:输入blog地址,例如http://blogs.impx.net/dragonimp和blog帐号密码,点下一步自动配置service的api,完成即可。

实现:根据自动发现接口协议,实现对Dottext blog的service api的自动发现。

1、首先在default.aspx中增加link:

<link id="RSDLink" title="rsd" type="application/rsd+xml" rel="edituri" runat="Server"/>

2、在DottextMasterPage.cs中增加地址设置

RSDLink.Attributes.Add("href",CurrentBlog.FullyQualifiedUrl + "rsd.aspx");

3、在web.config增加rsd.aspx的处理引擎

<HttpHandler pattern="/rsd/.aspx$" type="Dottext.Common.Syndication.RsdHandler,Dottext.Common"    handlerType="Direct" />

4、实现RsdHandler类和RsdWriter(采用RSS的写法并继承原有的BaseSyndicationHandler类)

/*
using something needed...
Description:Rsd handler for Dottext Metaweblog api
Author:dragonimp 2009.1.11
http://www.impx.net http://blogs.impx.net/dragonimp

*/

namespace Dottext.Common.Syndication
{
    class RsdWriter : System.Xml.XmlTextWriter
    {
        private StringWriter _sw = null;
        protected BlogConfig config;

        public RsdWriter(): this(new StringWriter())
        {
        }

        public RsdWriter(System.IO.Stream stream,Encoding encoding) : base(stream,encoding)
        {
        }

        public RsdWriter(StringWriter sw): base(sw)
        {
            _sw = sw;
            config = Dottext.Framework.Configuration.Config.CurrentBlog();
        }

        public StringWriter StringWriter
        {
            get
            {
                Build();
                return _sw;
            }
        }

        public string GetXml
        {
            get { return this.StringWriter.ToString(); }
        }

        private void Build()
        {
            //this.Formatting = System.Xml.Formatting.Indented;
           // this.WriteStartDocument();
            this.WriteStartElement("rsd");
            this.WriteAttributeString("version","1.0");
            this.WriteStartElement("servie");
            this.WriteElementString("engineName","Dottext Rsd service 1.0 by dragonimp");
            //this.WriteEndElement();//enginename
            this.WriteElementString("engineLink",config.FullyQualifiedUrl + "rsd.aspx");
            //this.WriteEndElement();//enginelink
            this.WriteElementString("homePageLink",config.FullyQualifiedUrl);
            //this.WriteEndElement();//homepagelinke           
            this.WriteStartElement("apis");
            this.WriteStartElement("api");
            this.WriteAttributeString("name","MetaWeblog");
            this.WriteAttributeString("preferred","true");
            this.WriteAttributeString("apiLink",config.FullyQualifiedUrl + @"services/Metablogapi.aspx");
            this.WriteAttributeString("blogID",config.UserName);
            this.WriteEndElement();//api
            this.WriteEndElement();//apis
            this.WriteEndElement();//service
            this.WriteEndElement();//rsd
           //  this.WriteEndDocument();//
        }
    }

    class RsdHandler : Dottext.Framework.Syndication.BaseSyndicationHandler
    {
        public RsdHandler() { }
        private string key = "IndividualMainFeed_Rsd:FQU{0}";

        protected override string CacheKey()
        {
            return string.Format(key,CurrentBlog.FullyQualifiedUrl);
        }
        protected override void Cache(CachedFeed Feed)
        {
            Context.Cache.Insert(CacheKey(),Feed,null,DateTime.Now.AddSeconds((double)Dottext.Common.Data.CacheTime.Medium),TimeSpan.Zero);
        }
        protected override CachedFeed BuildFeed()
        {
            this.key += "BlogID_Rsd" + CurrentBlog.BlogID.ToString();
            CachedFeed Feed = new CachedFeed();
            Feed.LastModified = this.ConvertLastUpdatedDate(CurrentBlog.LastUpdated);

            RsdWriter rsdwriter = new RsdWriter();
            Feed.Xml=rsdwriter.GetXml;
            return Feed;
        }
    }
}

参考文章

http://www.tiray.net/post/Really-Simple-Discovery.aspx
http://cyber.law.harvard.edu/blogs/gems/tech/rsd.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐