La mise en œuvre de C# XMLRPC.NET le client et le serveur via le protocole HTTPS
Il est assez difficile de trouver des informations sur XMLRPC.net bibliothèque utilisée avec le protocole https.
La seule documentation où un "https" est ici : http://xml-rpc.net/faq/xmlrpcnetfaq-2-5-0.html#2.3 mais pourtant, il ne permet pas d'expliquer exactement comment l'installation correctement.
L'expérimentation sur la base des échantillons fournis dans les téléchargements http://xmlrpcnet.googlecode.com/files/xml-rpc.net.2.5.0.zip j'ai essayé ceci :
L'évolution du client.cs fichier de StateNameServer solution :
IStateName svr = (IStateName)Activator.GetObject(
typeof(IStateName), "https://localhost:5678/statename.rem");
Ce que le serveur à quoi ressemble le code
IDictionary props = new Hashtable();
props["name"] = "MyHttpChannel";
props["port"] = 5678;
HttpChannel channel = new HttpChannel(
props,
null,
new XmlRpcServerFormatterSinkProvider()
);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(StateNameServer),
"statename.rem",
WellKnownObjectMode.Singleton);
Le client diminue évidemment une exception lorsque vous tentez de communiquer avec le serveur à l'aide de HTTPS parce que je ne sais pas comment le configurer. Quelqu'un pourrait-il aider de toutes les façons s'il vous plaît ? Qu'est-ce que je dois chercher ?
Merci beaucoup !
OriginalL'auteur virrea | 2011-10-26
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, je tiens à remercier chaleureusement Charles Cook pour son aide sur ce problème et pour le développement de XMLRPC.NET.
Seconde, cet exemple est basé sur le XMLRPC.NET StateNameServer de l'échantillon disponible pour téléchargement ici :
http://xml-rpc.net/download.html
Voici donc la solution :
1. Générer ou d'obtenir un [auto-signé] certificat (à l'aide de makecert.exe par exemple)
2. Ajouter ce certificat à la configuration de votre serveur et de spécifier le port que vous souhaitez utiliser avec votre XMLRPC.NET serveur (dans ce cas 5678) à l'aide de httpcfg.exe ou un autre outil comme HttpSysConfig (Open Source)
3. Mettre en œuvre votre XMLRPC.NET serveur en utilisant le code suivant :
4. Mettre en œuvre votre XMLRPC.NET client en utilisant le code suivant (le code crée également un nouveau certificat X509 client)
Bien sûr, je ne donne pas ici l'implémentation de l'interface pour la ServerStateName mais vous la trouverez dans les exemples de fichiers en utilisant le lien de téléchargement en haut.
Remarque :
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy()
; permettra la mise en œuvre de serveur pour accepter le certificat auto-signé que vous avez généré par vous-même. Je pense que ce n'est pas nécessaire avec des certificats émis par des autorités de certification.Si vous trouvez quelque chose qui pourrait être amélioré, et il est incorrect, il sera très appréciée.
OriginalL'auteur virrea
Créer un proxy client à l'aide de XmlRpcProxyGen.Créer, en précisant l'url https (votre interface doit dériver de IXmlRpcProxy). Si vous devez fournir un certificat client(s) le proxy a un ClientCertificates une propriété qui peut être utilisé de la même manière que la propriété correspondante sur le Système.Net.Classe HttpWebRequest.
Je ne pense pas que l'accès distant peut soutenir HTTPS. Vous pouvez utiliser HttpListener comme décrit dans la XML-RPC.NET FAQ mais vous aurez besoin pour configurer un certificat, par exemple comme décrit dans cette blog
Ajouté le paragraphe sur la mise en œuvre d'un serveur.
Merci pour votre aide, Charles, votre lien m'a aidé à trouver la solution. J'ai ajouté le certificat sur le serveur (mon ordinateur local en fait)... le reste de la solution ci-dessous dans ma réponse.
OriginalL'auteur Charles Cook
Super article! M'aide beaucoup.
Mais l'article 1 et 2 m'a pris une journée pour comprendre. Donc, voici mon expérience:
Pour ce faire, tapez " mmc " dans cmd->File->Ajouter/Supprimer un composant logiciel Enfichable->Certificats->Add->compte d'Ordinateur->ordinateur>OK. Accédez à Personnel->Certificats->clic Droit->Toutes les tâches->Demande de nouveau certificat. Suivant->Next->sélectionnez Serveur Web->cliquez sur le lien en bleu->fondamentalement, vous avez besoin de se sentir Nom Commun ici (mettre de certificat souhaité nom). Ok->s'Inscrire. Maintenant, vous avez le vôtre certificat dans le local de stockage.
Pour ce faire exécuter chaîne suivante dans cmd:
netsh http add sslcert ipport=192.168.111.195:4022 certhash=c8973a86141a7a564a6f509d1ecfea326a1852a2 appid={0a582a74-fc2d-476c-9281-c73b2e4bfb26}
, où "ipport' est ip/port de la paire qui sera utilisé pour la connexion ssl; 'certhash' est un hachage de certificat (ouvert de certificat que vous avez créé à l'étape précédente->aller aux Détails->rechercher Empreinte numérique); le "appid" pourrait être tout.Si vous vous spécifiez "https" dans votre HttpListener url de cette classe recherchera automatiquement lié certificats.
OriginalL'auteur Vladyslav Chernysh