Je voulais transférer (et exécuter) un objet Action ou Func d'un client C# vers une application serveur C# en utilisant WCF.Exécution à distance des objets Action <> ou Func <>
Voici mon code:
[ServiceContract]
interface IRemoteExecuteServer
{
[OperationContract]
void Execute(Action action);
}
class RemoteExecuteServer : IRemoteExecuteServer
{
public void Execute(Action action)
{
action();
}
}
Servercode:
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(RemoteExecuteServer), new Uri("net.tcp://localhost:8000")))
{
host.AddServiceEndpoint(typeof(IRemoteExecuteServer), new NetTcpBinding(), "RES");
host.Open();
Console.WriteLine("Server is running!");
Console.WriteLine("Press any key to exit...");
Console.ReadKey(true);
host.Close();
}
}
}
Clientcode:
class Program
{
static void Main(string[] args)
{
IRemoteExecuteServer server = new ChannelFactory<IRemoteExecuteServer>(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8000/RES")).CreateChannel();
server.Execute(delegate()
{
Console.WriteLine("Hello server!");
});
}
}
Lors de l'exécution de la ligne "Server.Execute" Je reçois un CommunicationException. Est-ce que quelqu'un sait comment corriger cette erreur?
Merci pour votre aide!
Donc, vous pensez aussi que ce que je veux faire n'est PAS POSSIBLE de la façon dont je l'ai montré ou n'est-ce pas vous qui le faites de cette façon. Compiler vers DLL ou quelque chose comme ça n'est pas une option pour moi. – raisyn
Comme je l'ai dit. Action ou Func n'est pas un objet, c'est une référence à la fonction. Pensez simplement à Action en tant que fonction. Pouvez-vous envoyer la fonction au serveur pour l'exécution? Non, vous ne pouvez pas. Du moins pas de la façon dont tu penses pouvoir le faire. – Euphoric
Donc vous fondamentalement une fonction n'est pas un objet "réel"? – raisyn