Changes between Version 3 and Version 4 of DotNet


Ignore:
Timestamp:
Apr 19, 2012, 7:32:52 AM (12 years ago)
Author:
Ryan J Ollos
Comment:

Page moved to XmlRpcPlugin/DotNet.

Legend:

Unmodified
Added
Removed
Modified
  • DotNet

    v3 v4  
    1 = Accessing XmlRpcPlugin from C# =
    2 
    3 It is possible to access Trac via the XmlRpcPlugin plug-in from Microsoft's .NET framework.  This should work for any .NET language (including Visual Basic).  The steps below are written in C#.
    4 
    5 == Step 1. Install the Trac XmlRpcPlugin ==
    6 
    7 see XmlRpcPlugin
    8 
    9 
    10 == Step 2. Download and compile XML-RPC.NET ==
    11 
    12 [http://xml-rpc.net XML-RPC.NET]
    13 
    14 
    15 == Step 3. Create a .NET project ==
    16 
    17 To your new project, add the library you just compiled (above) as a reference.
    18 
    19 
    20 == Step 4. Create the interface ==
    21 
    22 Some day it would be nice to have the complete WikiRPC described; for now, you can just piece together the methods you need as you need them.  Create an interface that extends IXmlRpcProxy.  In this example, the interface is named "Trac".  Then, declare methods that are tagged as XmlRpcMethod as below.
    23 
    24 I have included two examples.  The first returns a list of all the pages on your wiki.  The second posts a new page (or a new revision to an existing page) to the wiki.
    25 
    26 {{{
    27 using CookComputing.XmlRpc;
    28 
    29 namespace TracPusher {
    30     [XmlRpcUrl("https://your.server.org/trac/login/xmlrpc")]
    31     public interface Trac : IXmlRpcProxy
    32     {
    33         [XmlRpcMethod("wiki.getAllPages")]
    34         string[] getAllPages();
    35 
    36         [XmlRpcMethod("wiki.putPage")]
    37         bool putPage(string pagename, string content, struct PageAttributes attr);
    38     }
    39 
    40     // define the structure needed by the putPage method
    41     struct PageAttributes {
    42         public string comment;
    43     }
    44 }
    45 }}}
    46 
    47 
    48 == Step 5. Application Code ==
    49 
    50 Here's an example of how to use this.  For simplicity, we'll just add a Main to the above
    51 
    52 {{{
    53 static void Main(string [] args)
    54 {
    55    Trac proxy;
    56 
    57    // Fill these in appropriately
    58    string user = "yourTracUserName";
    59    string password = "yourTracPassword";
    60 
    61    /// Create an instance of the Trac interface
    62    proxy = XmlRpcProxyGen.Create<Trac>();
    63 
    64    // If desired, point this to your URL. If you do not do this,
    65    // it will use the one specified in the service declaration.
    66    // proxy.Url = "https://trac-rules.org/xmlrpc";
    67 
    68    // Attach your credentials
    69    proxy.Credentials = new System.Net.NetworkCredential(user, password);
    70 
    71    PageAttributes attr;
    72    attr.comment = "This is the comment that goes with the new page";
    73    bool rc = proxy.putPage("SandBox", // new page name
    74               "''hi chris'', this page was automatically added via XmlRpc from .NET", // new page contents
    75               attr // new page attributes
    76    );
    77 
    78    Console.WriteLine("Result: " + rc);
    79 }
    80 }}}
    81 
    82 
    83 == Step 6. Handling Certificate Problems (if any) ==
    84 
    85 If your trac uses https, make sure it has a valid, verifyable certificate. If you use a self-signed or expired certificate, all is not lost, but you have to take a few additional steps.
    86 
    87 First, you need to create a server certificate validation callback that always says the certificate is OK, even if it's really not.  Example:
    88 
    89 {{{
    90 private bool AcceptCertificateNoMatterWhat(object sender,
    91             System.Security.Cryptography.X509Certificates.X509Certificate cert,
    92             System.Security.Cryptography.X509Certificates.X509Chain chain,
    93             System.Net.Security.SslPolicyErrors errors)
    94 {
    95    return true;
    96 }
    97 }}}
    98 
    99 Second, ''before'' you create the proxy, do this (for example, at the beginning of Main)
    100 
    101 {{{
    102 ServicePointManager.ServerCertificateValidationCallback = AcceptCertificateNoMatterWhat;
    103 }}}
    104 
    105 
     1[[redirect(XmlRpcPlugin/DotNet)]]