C# Call xml-rpc API [CS_xml-rpc_client] (GOOGLE: c# xml-rpc)
C# Call xml-rpc API [CS_xml-rpc_client] (GOOGLE: c# xml-rpc)
資料來源: https://stackoverflow.com/questions/40647779/how-to-call-an-api-which-is-based-on-xml-rpc-specification-in-c
GITHUB: https://github.com/jash-git/CS_xml-rpc_client
Code
01.xmlrpc_server.php
<?PHP
//https://tldp.org/HOWTO/XML-RPC-HOWTO/xmlrpc-howto-php.html
include "lib/xmlrpc.inc";
include "lib/xmlrpcs.inc";
function sumAndDifference ($params) {
// Parse our parameters.
$xval = $params->getParam(0);
$x = $xval->scalarval();
$yval = $params->getParam(1);
$y = $yval->scalarval();
// Build our response.
$struct = array('sum' => new xmlrpcval($x + $y, 'int'),
'difference' => new xmlrpcval($x - $y, 'int'));
return new xmlrpcresp(new xmlrpcval($struct, 'struct'));
}
// Declare our signature and provide some documentation.
// (The PHP server supports remote introspection. Nifty!)
$sumAndDifference_sig = array(array('struct', 'int', 'int'));
$sumAndDifference_doc = 'Add and subtract two numbers';
new xmlrpc_server(array('sample.sumAndDifference' =>
array('function' => 'sumAndDifference',
'signature' => $sumAndDifference_sig,
'docstring' => $sumAndDifference_doc)));
?>
02.xmlrpc_client.php
<html>
<head>
<title>XML-RPC PHP Demo</title>
</head>
<body>
<h1>XML-RPC PHP Demo</h1>
<?php
//https://tldp.org/HOWTO/XML-RPC-HOWTO/xmlrpc-howto-php.html
include 'lib/xmlrpc.inc';
// Make an object to represent our server.
$server = new xmlrpc_client('phpxmlrpc/xmlrpc_server.php',
'127.0.0.1', 8080);
// Send a message to the server.
$message = new xmlrpcmsg('sample.sumAndDifference',
array(new xmlrpcval(5, 'int'),
new xmlrpcval(3, 'int')));
$result = $server->send($message);
// Process the response.
if (!$result) {
print "<p>Could not connect to HTTP server.</p>";
} elseif ($result->faultCode()) {
print "<p>XML-RPC Fault #" . $result->faultCode() . ": " .
$result->faultString();
} else {
$struct = $result->value();
$sumval = $struct->structmem('sum');
$sum = $sumval->scalarval();
$differenceval = $struct->structmem('difference');
$difference = $differenceval->scalarval();
print "<p>Sum: " . htmlentities($sum) .
", Difference: " . htmlentities($difference) . "</p>";
}
?>
</body>
</html>
© 2021 GitHub, Inc.
03.C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CookComputing.XmlRpc;//Step 2 ~ xml-rpc
/*
GOOGLE: c# xml-rpc
https://stackoverflow.com/questions/40647779/how-to-call-an-api-which-is-based-on-xml-rpc-specification-in-c
https://tldp.org/HOWTO/XML-RPC-HOWTO/xmlrpc-howto-php.html
https://github.com/marcosbozzani/xmlrpcnet/tree/master/samples/SumAndDiffVB
Step 1 : Created a Console Application in .NET
Step 2 : Install the NuGet "xml-rpc.net"
Step 3: Created a sample request model class like this,
Step 4 : Created a sample response model class like this,
Step 5 : Create an interface which is inherited form IXmlRpcProxy base class with the help of the namespace using CookComputing.XmlRpc; and this interface must contain our endpoint method and it should decorate with the filter XmlRpcUrl having the API resource.
Step 6 : To make calls to an XML-RPC server it is necessary to use an instance of a proxy class.
*/
namespace CS_xml_rpc_client
{
public class response//Step 4 ~ xml-rpc
{
public int sum { get; set; }
public int difference { get; set; }
}
[XmlRpcUrl("http://127.0.0.1:8080/phpxmlrpc/xmlrpc_server.php")]//Step 5 ~ xml-rpc
public interface sumAndDifference : IXmlRpcProxy
{
[XmlRpcMethod("sample.sumAndDifference")]//endpoint name
response sumAndDifference(int x,int y);
}
class Program
{
static void Pause()
{
Console.Write("Press any key to continue...");
Console.ReadKey(true);
}
static void Main(string[] args)
{
//---
//Step 6 ~ xml-rpc
response response = new response();
sumAndDifference fun = XmlRpcProxyGen.Create<sumAndDifference>();
response = fun.sumAndDifference(5,3);
Console.WriteLine("response = {0},{1}", response.sum, response.difference);
//---Step 6 ~ xml-rpc
Pause();
}
}
}
One thought on “C# Call xml-rpc API [CS_xml-rpc_client] (GOOGLE: c# xml-rpc)”
SOAP
XML-RPC
.NET C# client