J'ai passé deux jours à essayer de comprendre cela et je suis excité. J'ai un serveur WCF qui fonctionne comme service sur Windows. Un client peut se connecter sur la même machine, mais dès que je déménage, essayez de vous connecter au service d'une autre machine que je ne peux pas.
Donc, si le client et l'hôte sont sur la même machine, aucun problème. Si l'hôte et le client sont sur des machines distinctes, je reçois des erreurs d'exception. P>
Voici la partie étrange, je peux utiliser le SVCuttil pour générer les fichiers de configuration et proxy.cs de l'application à partir d'une machine distante, mais dès que j'appelle la fonction, il crache des erreurs. P> n'a pas pu se connecter à net.tcp: // iPaddress: port / service1. Code d'erreur TCP 10061. Aucune connexion n'a pu être faite car la machine cible a activement refusé cela. P>
Si je l'appelle de la même machine hôte / client sans erreur. P>
Toutes les idées?
mise à jour: p>
Voici les paramètres de point de fin de service. P>
<system.serviceModel> <services> <service behaviorConfiguration="Service1Behavior" name="WcfServiceLibrary1.Service1"> <endpoint address="net.tcp://192.168.1.75:8523/Service1" binding="netTcpBinding" contract="WcfServiceLibrary1.IService1" /> <endpoint address="net.tcp://192.168.1.75:8523/mex" binding="mexTcpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://192.168.1.75:8523/" /> </baseAddresses> </host> </service> </services> <bindings> <netTcpBinding> <binding name = "TcpBindingConfiguration"> <security mode="None"/> </binding> </netTcpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="Service1Behavior"> <serviceMetadata /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
4 Réponses :
Si Windows Firewall est activé sur la machine hôte, essayez de le désactiver (vous pouvez y parvenir via Panneau de configuration). Si cela fonctionne alors, vous avez trouvé le coupable. Vous devrez ajouter une exception à votre service dans la configuration du pare-feu et réynacjour.
Même si vous utilisez un autre logiciel de pare-feu tiers, comme cela est souvent fourni avec un logiciel antivirus. P>
Pour définir aucune sécurité sur TCP, vous pouvez utiliser le constructeur dans le code: p> ou vous pouvez le faire dans la configuration XML: < / p>
Pas de pare-feu. Toutes handicapées à la fois ordinateur hôte et client. Tout est grand ouvert, c'est ce qui me confondre ...
J'ai allumé la trace et j'ai reçu cette erreur: une exigence de sécurité n'a pas été remplie lors de l'authentification. Requis: signe, négocié: cryptandSign. Comment puis-je désactiver la sécurité ??? Aider...
@nitefrog - a ajouté des informations sur la désactivation de la sécurité sur netcpbinding code>
"Comment puis-je désactiver la sécurité?" Cela devrait déclencher de nombreuses alarmes de santé mentale ici.
@Erik: Je suggérerais de le désactiver comme une technique de dépannage.
@John: Assez juste, mais cela me semble que l'OP est nouveau pour utiliser WCF, alors je pensais que cela devrait être mentionné qu'il s'agissait d'une technique de dépannage et non destinée à la production.
@Erikheemskerk Je suis juste en train d'essayer de comprendre pourquoi cela ne fonctionne pas. Prenant une étape à la fois, ajoutez la sécurité dans.
Toujours ne fonctionne pas. J'ai ajouté, aucun, recherché sur le Web et tout semble correct, mais cela ne fonctionnera pas à partir d'une machine distante.
Le service de la WCF a-t-il écouté activement sur ce port? Vous devriez être capable de dire en cours d'exécution à partir de la ligne CMD:
<system.diagnostics> <sources> <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> <listeners> <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData= "C:\MyApp.svclog" /> </listeners> </source> </sources> </system.diagnostics>
J'avais le même problème "... tout va bien si le client et l'hôte sont sur la même machine, mais si l'hôte et le client sont sur des machines distinctes, je reçois des erreurs d'exception". P>
C'est ce qui a résolu le problème pour moi:
Mes paramètres de connexion Internet ont utilisé un serveur proxy. J'ai changé les options IE pour les paramètres LAN sur BYPASS Server Proxy Server pour les adresses locales CODE> et
N'utilisez pas de serveur proxy pour les adresses commençant par: http: \\ hôte-ip-ici code> p>
sur le côté serveur, je l'ai fait et cela fonctionne:
var tcpServiceUri = new UriBuilder { Scheme = Uri.UriSchemeNetTcp, Host = LocalIPAddress(),//@"127.0.0.1", //IpAddress, Port = int.Parse(_port), //BaseTcpPort, Path = @"/SomeService", }; _host = new ServiceHost(typeof(SomeService), tcpServiceUri.Uri); public string LocalIPAddress() { IPHostEntry host; string localIP = ""; host = Dns.GetHostEntry(Dns.GetHostName()); foreach (IPAddress ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { localIP = ip.ToString(); break; } } return localIP; }
Une dernière chose, parfois, je reçois cette erreur: la connexion de socket a été abandonnée. Cela ne se produit que sur une machine distante qui tente de parler à l'hôte. Si le client est sur la machine hôte, pas de problèmes ... frustrant ...
Je sens le pare-feu; Pouvez-vous essayer
telnet code> vos services hébergés de PC distant? Vérifiez le pare-feu des deux PC. BTW, quel port vous connectez-vous?
Veuillez poster un exemple de votre configuration de point de terminaison. De plus, quels sont les systèmes d'exploitation client et serveur et sont-ils sur le même domaine. Quel utilisateur est le service fonctionnant comme et quel utilisateur se trouve que le client est exécuté.
Découvrez cette question. Le problème doit être un dossier temporaire accessible. Stackoverflow.com/q/4119964/1155650