Tutorial: Sencilla WCF XML-RPC del cliente

Actualización: me han proporcionado ejemplo de código completo en respuesta a continuación.

He construido mi propia custom XML-RPC server, y ya que me gusta mantener las cosas simples, en tanto del servidor como del lado del cliente, lo que me gustaría lograr es crear una más simple posible cliente (en C# preferiblemente) con WCF.

Digamos que el Contrato para el servicio expone a través de XML-RPC es como sigue:

[ServiceContract]
public interface IContract
{
    [OperationContract(Action="Ping")]
    string Ping(); //server returns back string "Pong"

    [OperationContract(Action="Echo")]
    string Echo(string message); //server echoes back whatever message is
}

Por lo tanto, hay dos ejemplos de métodos, uno sin argumentos, y otro con el simple argumento de cadena, tanto devolver cadenas (solo para el bien de ejemplo). El servicio se expone a través de http.

Aaand, ¿qué es lo próximo? 🙂

OriginalEl autor mr.b | 2010-05-20

2 Kommentare

  1. 13

    Inspirado por Doobi la respuesta, busqué algo más de información (ejemplos) sobre el tema, y se llegó a las siguientes conclusiones.

    Pasos para crear una simple WCF XML-RPC del cliente:

    1. Descargar XML-RPC para WCF desde esta página: http://vasters.com/clemensv/PermaLink guid,679ca50b-c907-4831-81c4-369ef7b85839.aspx (enlace de descarga está en la parte superior de la página)
    2. Crear un proyecto vacío que los objetivos de .NET 4.0 Completo marco (o de otro Sistema.ServiceModel.En la Web no estará disponible más adelante)
    3. Agregar De Microsoft.Muestras.XmlRpc proyecto desde el archivo a su proyecto
    4. Agregar referencia a Microsoft.Muestras.XmlRpc proyecto
    5. Agregar referencias al Sistema.ServiceModel y del Sistema.ServiceModel.Web

    Código de ejemplo

    using System;
    using System.ServiceModel;
    using Microsoft.Samples.XmlRpc;
    
    namespace ConsoleApplication1
    {
    
    
        //describe your service's interface here
        [ServiceContract]
        public interface IServiceContract
        {
            [OperationContract(Action="Hello")]
            string Hello(string name);
        }
    
    
        class Program
        {
            static void Main(string[] args)
            {
                ChannelFactory<IServiceContract> cf = new ChannelFactory<IServiceContract>(
                    new WebHttpBinding(), "http://www.example.com/xmlrpc");
    
                cf.Endpoint.Behaviors.Add(new XmlRpcEndpointBehavior());
    
                IServiceContract client = cf.CreateChannel();
    
                //you can now call methods from your remote service
                string answer = client.Hello("World");
            }
        }
    }

    Ejemplo de solicitud/respuesta de mensajes de

    Solicitud XML

    <?xml version="1.0" encoding="utf-8"?>
    <methodCall> 
        <methodName>Hello</methodName> 
        <params> 
            <param> 
                <value> 
                    <string>World</string> 
                </value> 
            </param> 
        </params> 
    </methodCall> 

    XML de respuesta

    <?xml version="1.0" encoding="utf-8"?>
    <methodResponse> 
        <params> 
            <param> 
                <value> 
                    <string>Hello, World!</string> 
                </value> 
            </param> 
        </params> 
    </methodResponse> 
    Se ve bueno, bonito encontrar.

    OriginalEl autor mr.b

  2. 6

    La forma más fácil es usar un WCF channelfactory

        IStuffService client = new ChannelFactory<IStuffService>(
            new BasicHttpBinding(),
            *"Stick service URL here"*)
            .CreateChannel();

    Y ejecutar la solicitud simplemente llamando a

    var response = client.YourOperation(params)

    Más detalles aquí:
    http://msdn.microsoft.com/en-us/library/ms734681.aspx

    editar:editar 😉

    +1 para el Corto y al punto. Pero no funcionó para mí. Me estaba poniendo «no Reconocido mensaje de error» versión. Ver mi respuesta para la solución que funcionó para mí.
    por favor, edita tu post para que yo pueda upvote usted (algo salió mal, dice que puedo upvote sólo si edita tu post, jeje)

    OriginalEl autor Doobi

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea