public virtual PingbackResult SendPingback(AtomEntry entry, Uri pingUrl, Uri pageUrl)
 {
   LogService.Info("TrackbackService.SendPingback entryId={0} pingUrl={1} pageUrl={2}", entry.Id, pingUrl, pageUrl);
   try
   {
     var url = new UrlHelper(Container.GetInstance<RequestContext>());
     using (WebClient client = new WebClient())
     {
       string response = client.UploadString(pingUrl,
           new XElement("methodCall",
               new XElement("methodName", "pingback.ping"),
               new XElement("params",
                   new XElement("param",
                       new XElement("value",
                       new XElement("string", url.RouteIdUrl("BlogEntry", entry.Id, AbsoluteMode.Force)))),
                   new XElement("param",
                       new XElement("value",
                       new XElement("string", pageUrl))))).ToString());
       return new PingbackResult()
       {
         Xml = XElement.Parse(response.Substring(response.IndexOf('<')))
       };
     }
   }
   catch (Exception ex)
   {
     LogService.Error(ex);
     PingbackResult r = new PingbackResult();
     r.SetFault(0, ex.Message);
     return r;
   }
 }
    public string GetTrackbackMetadata(Id entryId)
    {
      var url = new UrlHelper(Container.GetInstance<RequestContext>());

      AtomEntry entry = AtomEntryRepository.GetEntry(entryId);
      string metadata = string.Empty;
      metadata += "\n<!--\n<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\nxmlns:dc=\"http://purl.org/dc/elements/1.1/\"\nxmlns:trackback=\"http://madskills.com/public/xml/rss/module/trackback/\">\n";
      metadata += string.Format("<rdf:Description\nrdf:about=\"{0}\"\ndc:identifier=\"{1}\"\ndc:title=\"{2}\"\ntrackback:ping=\"{3}\" />\n</rdf:RDF>\n-->\n\n",
          url.RouteIdUrl("BlogEntry", entry.Id, AbsoluteMode.Force), entry.Id, entry.Title.ToString(), url.RouteIdUrl("Trackback", entry.Id, AbsoluteMode.Force));
      return metadata;
    }
    public virtual TrackbackResult SendTrackback(AtomEntry entry, Uri pingUrl)
    {
      LogService.Info("TrackbackService.SendTrackback entryId={0} pingUrl={1}", entry.Id, pingUrl);
      try
      {
        var url = new UrlHelper(Container.GetInstance<RequestContext>());
        NameValueCollection data = new NameValueCollection();
        data.Add("title", entry.Title.ToString());
        data.Add("url", url.RouteIdUrl("BlogEntry", entry.Id, AbsoluteMode.Force));
        data.Add("excerpt", entry.Text.ToStringPreview(96));
        data.Add("blog_name", AppService.GetCollection(entry.Id).Title.ToString());

        using (WebClient client = new WebClient())
        {
          string result = Encoding.Default.GetString(client.UploadValues(pingUrl, data));
          return new TrackbackResult()
          {
            Xml = XElement.Parse(result.Substring(result.IndexOf('<')))
          };
        }
      }
      catch (Exception ex)
      {
        LogService.Error(ex);
        return new TrackbackResult()
        {
          Error = true,
          Message = ex.Message
        };
      }
    }