Windows Live Writer以及Xml-Rpc的介绍
Windows Live Writer是Microsoft推出的脱离浏览器的Blog编辑和发布的工具, 支持Html和简单的图片编辑上传, 使用它, 可以极大的方便Blog的编辑和发布. 现在Windows Live Writer对国外较大的Blog服务提供了支持, 如Live Spaces, Blogger等, 如果你没用使用支持列表里的服务却想使用Windows Live Writer的话, 只要给你的BLog添加相应的Xml-Rpc支持就可以了.
Xml-Rpc是类似WebService的一种远程调用服务, 但支持它的平台要比WebService要多, Windows Live Writer以及其他很多离线Blog编辑发布工具都是使用Xml-Rpc来调用Blog程序的相应方法.
本文以ASP.NET为例,给Blog添加对Windows Live Writer的Xml-Rpc的支持,让我们可以在Live Writer里面实现编辑, 发布和修改Blog条目, 如果你的Blog是使用其他平台的话, 请参看
http://www.xmlrpc.com/directory/1568/implementatio... 来查找如何在你的平台实现Xml-Rpc. 虽然在各平台实现Xml-Rpc的方法不同, 但是添加对Windows Live Writer支持的接口的步骤还是差不多的.
准备工作
对于ASP.NET平台, 首先在http://www.xml-rpc.net/ 下载对Xml-Rpc支持的组件, 解压缩后把bin文件夹中的 CookComputing.XmlRpcV2.dll 复制到ASP.NET程序的bin文件夹, 并且把interface文件夹中的 MetaWeblogAPI.cs 复制到App_Code文件夹(当然ASP.NET程序的其他文件夹也可以)..
开始
首先修改MetaWeblogAPI.cs文件, 这是Windows Live Writer支持的接口之一, 但是必须对它加一个方法才能正常的支持Windows Live Writer
添加一个struct:
public struct UserBlog
{
public string url;
public string blogid;
public string blogName;
}
这是用来保存Blog信息的结构
然后再IMetaWeblog接口中添加一个方法:
[XmlRpcMethod("blogger.getUsersBlogs")]
UserBlog[] getUsersBlogs(string appKey, string username, string password);
XmlRpcMethod指定的是在Xml-Rpc中的方法名, 这个不能改的..Client无法识别和调用
接口文件准备好了, 现在要实现接口的方法了
在添加在ASP.NET程序根目录添加一个ashx文件, 假设是Rpc.ashx, 下面提供一个Rpc.ashx的例子:
<%@ WebHandler Language="C#" Class="RPCService" %>
<%@ Assembly Name="CookComputing.XmlRpcV2" %>
using System;
using System.Collections;
using System.Web;
using CookComputing.XmlRpc; //引入XmlRpc
using CookComputing.MetaWeblog; //引入IMetaWeblog接口
using DataAccess; //引入你自己的Blog程序的数据访问namespace
[XmlRpcService(Description = "MetaWeblog XML-RPC Service")]
public class RPCService : XmlRpcService,IMetaWeblog
{
#region IMetaWeblog 成员
//获得Blog站点信息
public UserBlog[] getUsersBlogs(string appKey, string username, string password)
{
if (Login(username, password)) //验证用户名密码, 你必须在这个类中自己实现这个方法
{
UserBlog blog = new UserBlog();
blog.blogid = ""; //就一个Blog, 这个不用
blog.blogName = "LifeBeta"; //BlogName, 随便写吧
blog.url = "http://aspspider.org/lifebeta/"; //Blog的网址
return new UserBlog[] { blog };
}
return null;
}
//添加Blog
public string newPost(string blogid, string username, string password, Post post, bool publish)
{
if (Login(username, password))
{
//使用自己的DataAccess实现
return DataAccess.AddBlog(post.title, post.description, 4, "", false, DateTime.Now.AddHours(12)).ToString();
}
return null;
}
//编辑Blog
public object editPost(string postid, string username, string password, Post post, bool publish)
{
if (Login(username, password))
{
//使用你自己的DataAccess来实现, 注意post.title是标题, post.description是Blog的内容
DataAccess.EditBlog(Convert.ToInt32(postid), post.title, post.description, 4, "", false);
}
return null;
}
//获取分类
public CategoryInfo[] getCategories(string blogid, string username, string password)
{
if (Login(username, password))
{
//略
}
return null;
}
//获取文章
public Post getPost(string postid, string username, string password)
{
if (Login(username, password))
{
//略
}
return new Post();
}
//获取最近发表的文章
public Post[] getRecentPosts(string blogid, string username, string password, int numberOfPosts)
{
if (Login(username, password))
{
//略
}
return null;
}
//发布媒体对象
public UrlData newMediaObject(string blogid, string username, string password, FileData file)
{
if (Login(username, password))
return new UrlData();
}
return new UrlData();
}
//自定义方法
public bool Login(string userName, string pass)
{
//略,用来验证用户
}
#endregion
}
OK..差不多就这样了..在浏览器里输入这个ashx看看, 有以上实现的方法列表和数据类型, 挺像WebService的本地测试页面吧. 不过Xml-Rpc不能本地测试. 你现在就可以用Windows Live Writer来试试它了.
使用Windows Live Writer发布Blog
和添加其他Blog站点一样, 不过在选择Blog服务的时候要选择MetaWeblog(Custom), script的地址填ashx文件的路径.
大功告成! 因为使用了别人做好的Xml-Rpc解决方案, 所以要实现它还是挺简单的. 由于Live Writer尚处于beta阶段, 还是有些不完善的地方, .. 期待Live Writer的正式版吧..