Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pocket PC application client server avec C# et Ice

10 réponses
Avatar
vige
Bonjour tout le monde,
J'aimerais developper une application sur Pocket PC en utilisant le C# et
Ice (zeroc.com). J'aimerais que le client soit le PDA et que le server soit
le PC. Je cherche donc a savoir si quelqu'un a deja developper ce genre
d'application ne serait ce qu'en C# pour avoir un exemple d'une telle
application ? Et si quelqu'un avait deja utilise le langage Ice sur Visual
Studio 2003 .net ?
Merci pour vos reponses
Sylvain

10 réponses

Avatar
Paul Bacelar
Je ne vois le support du Compact FrameWork .NET dans les pages du site Web
de www.zeroc.com.

Sans le support du Compact FrameWork .NET, je ne suis pas sûr que
l'utilisation de leur MiddleWare sur PPC soit possible.

Pourquoi ne pas utiliser les WebServices comme MiddleWare ?
--
Paul Bacelar


"vige" wrote in message
news:
Bonjour tout le monde,
J'aimerais developper une application sur Pocket PC en utilisant le C# et
Ice (zeroc.com). J'aimerais que le client soit le PDA et que le server


soit
le PC. Je cherche donc a savoir si quelqu'un a deja developper ce genre
d'application ne serait ce qu'en C# pour avoir un exemple d'une telle
application ? Et si quelqu'un avait deja utilise le langage Ice sur Visual
Studio 2003 .net ?
Merci pour vos reponses
Sylvain


Avatar
vige
Merci pour votre reponse rapide,
Je ne peux pas utiliser les webs services tout simplement parce que dans mon
"cahier des charges" je dois utiliser Ice. Ice permet bien plus de chose que
les webservices, au niveau de l'interoperabilite entre plusieurs objets,
l'interogeneite des langages que l'on peut utiliser (python, java, C#, C++)
avec Ice et la compatibilite entre linux et windows.

Effectivement, il n'y a pas de compact Framework pour C# et j'ai seulement
pu trouver des exemples pour une application win32 (que je n'arrive pas a
faire fonctionner non plus). Je voulais savoir si je ne peux pas installer la
lib icecs.dll sur mon pocket PC (pour le moment c'est seulement sur
l'emulateur) et ainsi pouvoir developper mes appli sur le PDA.

Merci pour votre aide
Sylvain
Avatar
vige
Apparemment, je ne peux pas m'obstiner et ne peux utiliser Ice sur mon Pocket
PC. Il faudrait donc que j'utilise l'architecture .net remoting sur PPC. J'ai
bien teste un exemple en compilant directement dans l'invite de commande et
ca fonctionne. Le probleme, c'est que je n'arrive pas a compiler les
programmes qui compilent en ligne de commande avec visual studio 2003 .net.
Quelqu'un aurait-il une idee d'où peut provenir le probleme ?
Merci
Sylvain
Avatar
Paul Bacelar
Les WebServices sont plus portables et plus ouverts bien que moins
performants que .NET Remoting.
Si vous nous donnez le projet en question ou un projet minimal reproduisant
le problème, cela nous aiderez grandement, ainsi qu'un descriptif du
problème et les messages d'erreurs.
--
Paul Bacelar

"vige" wrote in message
news:
Apparemment, je ne peux pas m'obstiner et ne peux utiliser Ice sur mon


Pocket
PC. Il faudrait donc que j'utilise l'architecture .net remoting sur PPC.


J'ai
bien teste un exemple en compilant directement dans l'invite de commande


et
ca fonctionne. Le probleme, c'est que je n'arrive pas a compiler les
programmes qui compilent en ligne de commande avec visual studio 2003


.net.
Quelqu'un aurait-il une idee d'où peut provenir le probleme ?
Merci
Sylvain


Avatar
Paul Bacelar
"vige" wrote in message
news:
Merci pour votre reponse rapide,
Je ne peux pas utiliser les webs services tout simplement parce que dans


mon
"cahier des charges" je dois utiliser Ice. Ice permet bien plus de chose


que
les webservices, au niveau de l'interoperabilite entre plusieurs objets,
l'interogeneite des langages que l'on peut utiliser (python, java, C#,


C++)

Les WebServices est l'architecture la plus ouverte de ce point de vue, car
elle repose sur des normes.

avec Ice et la compatibilite entre linux et windows.



Les WebServices fonctionne avec la majorité des plateformes et n'est ni lié
à un OS ni même à un langage.



Effectivement, il n'y a pas de compact Framework pour C# et j'ai seulement
pu trouver des exemples pour une application win32 (que je n'arrive pas a
faire fonctionner non plus). Je voulais savoir si je ne peux pas installer


la
lib icecs.dll sur mon pocket PC (pour le moment c'est seulement sur
l'emulateur) et ainsi pouvoir developper mes appli sur le PDA.




Il vous faut les sources de la dll pour tenter un portage sur le CPU cible.

Merci pour votre aide
Sylvain




Bon courage.

--
Paul Bacelar
Avatar
vige
Bonjour,
J'ai effectivement trouve une application qui utilisait le .net remoting. Le
probleme c'est que cette application fonctionne sur PC. J'ai donc decide de
tenter de faire passer le code du client sur le pocket PC et de laisser le
serveur sur le PC. Voila donc le code du client :

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

///*********************************************************************************///
/// Exemple de remoting.
///
/// Auteur : tyris
www.developpez.com ///
///
///
/// Comme vous pouvez le remarquer on ne touche pas directement à l'objet
Employé. ///
/// On passe par le serveur à chaque fois.
///
/// On pourait faire la meme chose avec une connection à une base de données
dont ///
/// seul le serveur aurait acces.
///
///*********************************************************************************///

namespace Client
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Employe
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
try
{
//Enregistrer le canal TCP port 1234
//HTTP est possible aussi en utilisant
System.Runtime.Remoting.Channels.Http
TcpChannel chnl = new TcpChannel();
ChannelServices.RegisterChannel(chnl);
//Prendre la référence sur le serveur
(tcp://nommachine:port/EmployeeManager.soap)
IRemote.IEmploye mgr =
(IRemote.IEmploye)Activator.GetObject(typeof(IRemote.IEmploye),
"tcp://localhost:1234/EmployeeManager");
//Verifier que la reférence a été acquise
if (mgr == null)
{
Console.WriteLine("Client: SERVEUR en vacances
...essayez plus tard ");
}
else
{
Console.WriteLine("Client: Reference au serveur acquise
");
//On peut a present appeler les méthodes de la façon
mgr.maMethode
mgr.Augmenter(1000); //Belle augmentation
mgr.Augmenter(200); //Oula, il a baissé de
régime
mgr.Augmenter(75); //Rien foutu, il merite
qu'une augmentation de 75 euros
//On peut aussi récuperer des variables comme des
String, mais aussi des Dataset..
string monAge = mgr.Age();
Console.WriteLine(monAge);
Console.ReadLine(); //Attendre les
instructions sur la console...
}
}
catch (Exception ex)
{
Console.WriteLine("ERREUR :" + ex.Message);
}
}
}
}

Pour le moment le probleme vient du client. En effet, j'utilise le compact
framework .net 2.0 et visual studio 2005 car theoriquement le compact
framework possede les librairies System.Runtime, System.Runtime.Remoting,
System.Runtime.Remoting.Channels les librairies dont j'ai besoin. Ces
libraries sont dans mscorlib. Le probleme c'est que j'obtiens ces messages
d'erreurs :

Error 2 The type or namespace name 'Remoting' does not exist in the
namespace 'System.Runtime' (are you missing an assembly
reference?) C:Documents and SettingsAdministradormis documentosvisual
studio
2005ProjectsDeviceApplication1DeviceApplication1Client.cs 3 22 testRemotingPPC_Client

et

Error 4 The type or namespace name 'STAThread' could not be found (are you
missing a using directive or an assembly reference?) C:Documents and
SettingsAdministradormis documentosvisual studio
2005ProjectsDeviceApplication1DeviceApplication1Client.cs 26 10 testRemotingPPC_Client

Le serveur doit tourner sur le PC, j'ai donc cree pour celui ci une appli
windows (pour le client c'est une application Pocket PC).
Voila le code du serveur :

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;


namespace Serveur
{
/// <summary>
/// Summary description for Serveur.
/// </summary>
public class RemotingServer
{
public void Start()
{
//Ouvre un canal en mode TCP sur le port '1234'
TcpChannel chnl = new TcpChannel(1234);
ChannelServices.RegisterChannel(chnl);
//Publier notre objet EmployeeManager

RemotingConfiguration.RegisterWellKnownServiceType(typeof(EmployeeManager),
"EmployeeManager", WellKnownObjectMode.Singleton);
}
}

public class EmployeeManager : MarshalByRefObject, IRemote.IEmploye
{
Class1 myclass = new Class1();
//C'est cette classe que l'on distribue sur le reseau
public override object InitializeLifetimeService()
{
//Durée de vie de l'objet : pour "toujours"
return null;
}
public void Augmenter(double dMontant)
{
myclass.myEmp.Augmenter(dMontant);
}
public string Age()
{
return myclass.myEmp.Age();
}
}
}

mon main :
using System;

namespace Serveur
{
class Class1
{
public Employe myEmp = new Employe();
[STAThread]
static void Main(string[] args)
{
Serveur.RemotingServer myServer = new Serveur.RemotingServer();
try
{
Console.WriteLine(" Serveur : Demarrage ...");
myServer.Start();
Console.WriteLine("Serveur démarré...");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("Serveur : Erreur d'initialisation !!! " +
ex.Message);
}
}
}
}

Rq : J'utilise aussi [STAThread] et aucune erreur dans le main. Cela dit
pour le serveur j'importe la librairie System.Runtime.Remoting librairie qui
se trouve dans le Framework .Net. Et je pense que la seconde erreur du
client qui traite de STAThread vient aussi de l'importation de la lib
System.Runtime.Remoting.

enfin, voici mon code pour l'employee (IEmployee.cs) :

using System;

namespace Serveur
{
public class Employe
{
public int iID;
public string strNom;
public double fSalaire;

public Employe()
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("- Constructeur Employe : Creation -");
Console.WriteLine("-----------------------------------");
this.iID = 1;
this.strNom = "Durand";
this.fSalaire = 0;
InfoObjet();
}

public void Augmenter(double dMontant)
{
this.fSalaire += dMontant;
Console.WriteLine(" - Employé Augmenté, nouveau salaire : " +
this.fSalaire.ToString() + " -");
}

public string Age()
{
return "L'age du capitaine est inconnu";
}

public void InfoObjet()
{
Console.WriteLine("------------------------");
Console.WriteLine("- Employé -");
Console.WriteLine("- ID : " + this.iID.ToString() + "");
Console.WriteLine("- Nom : " + this.strNom + "");
Console.WriteLine("- Salaire : " + this.fSalaire.ToString() + "");
Console.WriteLine("------------------------");
}
}
}


La je ne peux pas vous donner plus de detail, c'est vraiment un probleme.
Merci pour votre aide,
Sylvain
Avatar
Paul Bacelar
Vérifiez avec ILDASM (dans l'arborescence de VS.NET) ou
reflector(http://www.aisto.com/roeder/dotnet/) le contenue des assemblies
référencées.
--
Paul Bacelar


"vige" wrote in message
news:
Bonjour,
J'ai effectivement trouve une application qui utilisait le .net remoting.


Le
probleme c'est que cette application fonctionne sur PC. J'ai donc decide


de
tenter de faire passer le code du client sur le pocket PC et de laisser le
serveur sur le PC. Voila donc le code du client :

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;




///*************************************************************************
********///
/// Exemple de remoting.
///
/// Auteur : tyris
www.developpez.com ///
///
///
/// Comme vous pouvez le remarquer on ne touche pas directement à l'objet
Employé. ///
/// On passe par le serveur à chaque fois.
///
/// On pourait faire la meme chose avec une connection à une base de


données
dont ///
/// seul le serveur aurait acces.
///



///*************************************************************************
********///

namespace Client
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Employe
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
try
{
//Enregistrer le canal TCP port 1234
//HTTP est possible aussi en utilisant
System.Runtime.Remoting.Channels.Http
TcpChannel chnl = new TcpChannel();
ChannelServices.RegisterChannel(chnl);
//Prendre la référence sur le serveur
(tcp://nommachine:port/EmployeeManager.soap)
IRemote.IEmploye mgr > (IRemote.IEmploye)Activator.GetObject(typeof(IRemote.IEmploye),
"tcp://localhost:1234/EmployeeManager");
//Verifier que la reférence a été acquise
if (mgr == null)
{
Console.WriteLine("Client: SERVEUR en vacances
...essayez plus tard ");
}
else
{
Console.WriteLine("Client: Reference au serveur


acquise
");
//On peut a present appeler les méthodes de la façon
mgr.maMethode
mgr.Augmenter(1000); //Belle augmentation
mgr.Augmenter(200); //Oula, il a baissé


de
régime
mgr.Augmenter(75); //Rien foutu, il


merite
qu'une augmentation de 75 euros
//On peut aussi récuperer des variables comme des
String, mais aussi des Dataset..
string monAge = mgr.Age();
Console.WriteLine(monAge);
Console.ReadLine(); //Attendre les
instructions sur la console...
}
}
catch (Exception ex)
{
Console.WriteLine("ERREUR :" + ex.Message);
}
}
}
}

Pour le moment le probleme vient du client. En effet, j'utilise le compact
framework .net 2.0 et visual studio 2005 car theoriquement le compact
framework possede les librairies System.Runtime, System.Runtime.Remoting,
System.Runtime.Remoting.Channels les librairies dont j'ai besoin. Ces
libraries sont dans mscorlib. Le probleme c'est que j'obtiens ces messages
d'erreurs :

Error 2 The type or namespace name 'Remoting' does not exist in the
namespace 'System.Runtime' (are you missing an assembly
reference?) C:Documents and SettingsAdministradormis documentosvisual
studio
2005ProjectsDeviceApplication1DeviceApplication1Client.cs 3 22


testRemotingPPC_Client

et

Error 4 The type or namespace name 'STAThread' could not be found (are you
missing a using directive or an assembly reference?) C:Documents and
SettingsAdministradormis documentosvisual studio
2005ProjectsDeviceApplication1DeviceApplication1Client.cs 26 10


testRemotingPPC_Client

Le serveur doit tourner sur le PC, j'ai donc cree pour celui ci une appli
windows (pour le client c'est une application Pocket PC).
Voila le code du serveur :

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;


namespace Serveur
{
/// <summary>
/// Summary description for Serveur.
/// </summary>
public class RemotingServer
{
public void Start()
{
//Ouvre un canal en mode TCP sur le port '1234'
TcpChannel chnl = new TcpChannel(1234);
ChannelServices.RegisterChannel(chnl);
//Publier notre objet EmployeeManager




RemotingConfiguration.RegisterWellKnownServiceType(typeof(EmployeeManager),
"EmployeeManager", WellKnownObjectMode.Singleton);
}
}

public class EmployeeManager : MarshalByRefObject, IRemote.IEmploye
{
Class1 myclass = new Class1();
//C'est cette classe que l'on distribue sur le reseau
public override object InitializeLifetimeService()
{
//Durée de vie de l'objet : pour "toujours"
return null;
}
public void Augmenter(double dMontant)
{
myclass.myEmp.Augmenter(dMontant);
}
public string Age()
{
return myclass.myEmp.Age();
}
}
}

mon main :
using System;

namespace Serveur
{
class Class1
{
public Employe myEmp = new Employe();
[STAThread]
static void Main(string[] args)
{
Serveur.RemotingServer myServer = new


Serveur.RemotingServer();
try
{
Console.WriteLine(" Serveur : Demarrage ...");
myServer.Start();
Console.WriteLine("Serveur démarré...");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("Serveur : Erreur d'initialisation !!! "


+
ex.Message);
}
}
}
}

Rq : J'utilise aussi [STAThread] et aucune erreur dans le main. Cela


dit
pour le serveur j'importe la librairie System.Runtime.Remoting librairie


qui
se trouve dans le Framework .Net. Et je pense que la seconde erreur du
client qui traite de STAThread vient aussi de l'importation de la lib
System.Runtime.Remoting.

enfin, voici mon code pour l'employee (IEmployee.cs) :

using System;

namespace Serveur
{
public class Employe
{
public int iID;
public string strNom;
public double fSalaire;

public Employe()
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("- Constructeur Employe : Creation -");
Console.WriteLine("-----------------------------------");
this.iID = 1;
this.strNom = "Durand";
this.fSalaire = 0;
InfoObjet();
}

public void Augmenter(double dMontant)
{
this.fSalaire += dMontant;
Console.WriteLine(" - Employé Augmenté, nouveau salaire : " +
this.fSalaire.ToString() + " -");
}

public string Age()
{
return "L'age du capitaine est inconnu";
}

public void InfoObjet()
{
Console.WriteLine("------------------------");
Console.WriteLine("- Employé -");
Console.WriteLine("- ID : " + this.iID.ToString() + "");
Console.WriteLine("- Nom : " + this.strNom + "");
Console.WriteLine("- Salaire : " + this.fSalaire.ToString() +


"");
Console.WriteLine("------------------------");
}
}
}


La je ne peux pas vous donner plus de detail, c'est vraiment un probleme.
Merci pour votre aide,
Sylvain


Avatar
vige
Bonjour,
J'ai effectivement teste ce que vous m'aviez dit, a savoir les web services.
Cela dit, j'ai trouve mieux concernant mon projet a savoir developper une
application CORBA sur Pocket PC. Le probleme et impossible de trouver ...
c'est que je n'arrive pas a faire correpspondre le client qui est sur mon PPC
et le server qui est sur le PC. Je ne sais pas si l'emulateur PPC 2003 a une
adresse ip, car impossible de le pinger. Donc, aucune application client
/server ne peut tourner sur ce PPC pas meme les web services comme vous me
l'aviez propose ....
Je ne comprends pas.
Savez vous comment faire pour connaitre si le PPC a une adresse IP ??
Merci pour votre aide
Sylvain
Avatar
Paul Bacelar
Il faut que votre PPC ai la pile TCP/IP correctement configuré. La procédure
doit dépendre du modèle de PPC.
--
Paul Bacelar

"vige" wrote in message
news:
Bonjour,
J'ai effectivement teste ce que vous m'aviez dit, a savoir les web


services.
Cela dit, j'ai trouve mieux concernant mon projet a savoir developper une
application CORBA sur Pocket PC. Le probleme et impossible de trouver ...
c'est que je n'arrive pas a faire correpspondre le client qui est sur mon


PPC
et le server qui est sur le PC. Je ne sais pas si l'emulateur PPC 2003 a


une
adresse ip, car impossible de le pinger. Donc, aucune application client
/server ne peut tourner sur ce PPC pas meme les web services comme vous me
l'aviez propose ....
Je ne comprends pas.
Savez vous comment faire pour connaitre si le PPC a une adresse IP ??
Merci pour votre aide
Sylvain


Avatar
vige
Bonjour,
oui en effet, c'est de la que viens le probleme, je parcoure les forums et
les tutoriels pour trouver le moyen de tester mon appli sur PPC. Cela dit je
n'ai toujours pas trouve .... Le savez vous ?
Merci
Sylvain