XML-RPC in C#

Wordpress进行操作,除了通过他的Web后台外,还有一种方法就是通过XML-RPC来实现。
关于XML-RPC我就不再赘述了,简单的来说就是:将包含着操作命令和操作数据的XML通过Http传输给XML-RPC Server。然后Server根据此XML分析出来的命令和数据进行操作,然后返回用户一个XML,里面包含了用户所需要数据的XML。

拿Wordpress自身的wp.getUsersBlogs命令举例

wp.getUsersBlogs
Retrieve the blogs of the users.
Parameters

  • string username
  • string password

Return Values

  • array
    • struct
      • boolean is_admin
      • string url
      • int blog_id
      • string blog_name
      • string xmlrpc_url

以上is_admin是表示该用户是否为管理员,url当然是你的博客地址,blog_id指的是博客的id到后面有用,blog_name指的是博客名(比方说我的是“风云阁”),xmlrpc_url是XML-RPC Server的地址。
值得一提的是,针对Wordpress而言,如果你的博客地址是http://www.xxx.com,则他的XML-RPC Server地址是http://wwwxxx.com/xmlrpc.php。
它的输入XML是

<methodCall>

    <methodName>wp.getUsersBlogs</methodName>

    <params>

        <param>

            <value>

                Username

            </value>

        </param>

        <param>

            <value>

                Password

            </value>

        </param>

    </params>

</methodCall>

以上的Username当然就是用户名了,Password当然就是你的密码,wp.getUsersBlogs是获得Blog的操作名。
当正确的时候返回的XML是(以我为例)

<methodResponse>

  <params>

    <param>

      <value>

        <array>

          <data>

            <value>

              <struct>

                <member>

                  <name>isAdmin</name>

                  <value>

                    <boolean>1</boolean>

                  </value>

                </member>

                <member>

                  <name>url</name>

                  <value>

                    <string>http://www.iron-feet.cn/</string>

                  </value>

                </member>

                <member>

                  <name>blogid</name>

                  <value>

                    <string>1</string>

                  </value>

                </member>

                <member>

                  <name>blogName</name>

                  <value>

                    <string>风云阁</string>

                  </value>

                </member>

                <member>

                  <name>xmlrpc</name>

                  <value>

                    <string>http://www.iron-feet.cn/xmlrpc.php</string>

                  </value>

                </member>

              </struct>

            </value>

          </data>

        </array>

      </value>

    </param>

  </params>

</methodResponse>

当用户名和密码出错的时候的XML是

<methodResponse>

  <fault>

    <value>

      <struct>

        <member>

          <name>faultCode</name>

          <value>

            <int>403</int>

          </value>

        </member>

        <member>

          <name>faultString</name>

          <value>

            <string>Bad login/pass combination.</string>

          </value>

        </member>

      </struct>

    </value>

  </fault>

</methodResponse>

根据Wordpress官方网站,Wordpress还支持Blogger API、MetaWeblog API以及Movable Type API

WordPress uses an XML-RPC interface. We currently support the Blogger API,metaWeblog API, and the Movable Type API.

各位看官们可以通过相关文档以及我上面的结构,获得正确的XML

自从有了Linq,很多东西变得非常方便了,比方说构造XML。接下来,介绍一下如果利用C#语言通过Linq构造XML,
比方说刚刚那个wp.getUsersBlogs的XML,构造代码如下:

                    XElement XmethodCall=

                        new XElement("methodCall",

                            new XElement("methodName", "wp.getUsersBlogs"),

                            new XElement("params",

                                new XElement("param",

                                    new XElement("value",

                                        new XElement("string", _strUsr)

                                    )

                                ),

                                new XElement("param",

                                    new XElement("value",

                                        new XElement("string", _strPwd)

                                    )

                                )

                            )

                        );

如何通过C#发送Post,方法如下:

        XElement Post(XElement XmethodCall)

        {

            WebRequest req = WebRequest.Create(strXmlRpc);//strXmlRpc是XML-RPC Server的地址,例如:我的就是http://www.iron-feet.cn/xmlrpc.php

            req.ContentType = "application/x-www-form-urlencoded";

            req.Method = "POST";

            byte[] bytes = System.Text.Encoding.ASCII.GetBytes(XmethodCall.ToString());

            req.ContentLength = bytes.Length;

 

            System.IO.Stream os = req.GetRequestStream();

            os.Write(bytes, 0, bytes.Length);

            os.Close();

            System.Net.WebResponse resp = req.GetResponse();

 

            System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());

 

            XElement tempX=XElement.Parse(sr.ReadToEnd().Trim());

 

            var query = tempX.Elements("fault").Elements("value").Elements("struct").Elements("member").Elements("name");

            foreach (XElement x in query)

            {

                if (x.Value == "faultString")

                {

                    throw new Exception(x.Parent.Elements("value").First().Value);

                }

            }

 

            if (tempX.Name.ToString()== "methodResponse")

            {

                return tempX;

            }

            else

            {

                throw new Exception("This is not an XML-RPC server!");

            }

 

        }

小小的介绍结束了。

你可能感兴趣的:(xml)