WCF donne chirographaire ou mal sécurisé de l'erreur d'
Je suis en train d'essayer de consommer une distance svc service web. J'ai créé la classe de proxy à l'aide de svcutil.exe
, et après que j'ai ajouté cette classe à mon application console, mais il génère une erreur:
Non garantis d'erreur ou mal sécurisé faute a été reçue de l'autre partie. Voir l'intérieur exception d'erreur pour le code d'erreur et le détail.
Système.ServiceModel.FaultException: Une erreur s'est produite lors de la vérification de sécurité pour le message
Je n'ai pas créer de la WCF côté, c'est une distance svc. S'il vous plaît aider.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="EloquaDataTransferService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://secure.eloqua.com/API/1.2/DataTransferService.svc"
binding="basicHttpBinding" bindingConfiguration="EloquaDataTransferService"
contract="DataTransferService" name="EloquaDataTransferService" />
</client>
</system.serviceModel>
</configuration>
C'est mon app.config
fichier. Je suis en fournissant le nom d'utilisateur et mot de passe dans mon consoleApp.cs
fichier à l'aide de obj.ServiceCredentials.UserName.UserName="xxxxxx"
et .Password="xxxXx"
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="EloquaDataTransferService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://secure.eloqua.com/API/1.2/DataTransferService.svc" binding="basicHttpBinding" bindingConfiguration="EloquaDataTransferService" contract="DataTransferService" name="EloquaDataTransferService" />
</client>
</system.serviceModel>
</configuration>
- Est-ce qui se passe lors de la première fois que vous accédez à un service ou il arrive après un certain temps?
- C'est difficile à dire sans plus de détails, mais il semble que les services à distance s'attend à des informations d'identification ou d'authentification qui ne sont pas fournis.
Vous devez vous connecter pour publier un commentaire.
C'est un très obscure faute des services WCF jeter. Le problème est que la WCF est pas en mesure de vérifier la sécurité de message qui a été transmis au service.
C'est presque toujours à la suite d'un serveur de temps de l'inclinaison. Le serveur distant et le système du client, le temps doit être à l'intérieur (généralement) 10 minutes les uns des autres. Si elles ne sont pas, sécurité la validation échouera.
Je dirais eloqua.com et de trouver ce qui leur serveur de temps, et de les comparer à votre serveur de temps.
Bien que votre problème a été résolu avec l'une des solutions ci-dessus, pour les autres, voici une autre option.
Vous pouvez également obtenir cette exception lorsque des informations d'identification sont transmises à une extrémité de base (SOAP 1.1), qui utilise le nom d'utilisateur message d'informations d'identification que vous êtes. Par exemple, si vous appelez le service à partir du code et de faire quelque chose comme ceci:
C'est différent d'un WSHTTP d'extrémité (SOAP 1.2) qui déclenche une
AccessDeniedException
lorsque les informations d'identification non valides sont passés à travers. Personnellement, je trouve le message contenu dans les présentes un peu trompeur (il a certainement m'a coûté quelques minutes la première fois que j'ai rencontré pour cette raison), mais la cause sous-jacente était clair une fois que j'ai consulté la WCF Diagnostic des Journaux de Trace.Vous avez manifestement un problème avec la WCF sous-système de sécurité. Ce que la liaison utilisez-vous? Ce que l'authentification? Le cryptage? Signature? Avez-vous de franchir les limites du domaine d'?
Un peu de vues spectaculaires révèle en outre que d'autres vivent ce message d'erreur si les horloges de client et le serveur de synchronisation (plus de cinq minutes environ) parce que certains schémas de sécurité s'appuient sur des horloges synchronisées.
Même ce problème, je suis face à mon client application WinForms application C# 4.0
Quand j'ai lu la solution ici, j'ai vérifié la Date & le Temps de l'ordinateur client, mais c'était tout a l'heure actuelle a été montrer, mais encore j'ai été confronté à ces problèmes.
Après un peu de travail-autour, j'ai trouvé le mauvais temps, la zone est sélectionnée, je suis en Inde, et l'heure de la zone est du Canada, le serveur hôte est situé au Koweït.
J'ai trouvé que le système convertit l'heure en temps universel.
Quand j'ai changé le fuseau horaire à l'Inde de fuseau horaire, le problème a été semelle.
Si vous êtes de passage à l'utilisateur des informations d'identification du client (par bloc de code ci-dessous), puis il doit correspondre avec le nom d'utilisateur/mot de passe sur le serveur. sinon, vous obtiendrez cette erreur.
Pour info, dans mon cas, je suis à l'aide de "basicHTTPAuthentication" avec "TransportWithMessageCredential" mode de sécurité. Et le service WCF est hébergé dans IIS sur https.
Espère que cela aidera à quelqu'un... 🙂
Essayez de changer votre mode de sécurité de "transport".
Vous avez un décalage entre l'étiquette de sécurité et le transport de la balise.
Pour ce que ça vaut, j'ai aussi eu cette erreur et a trouvé que c'était causé par la chaîne de connexion dans les web services.config être configuré pour se connecter à la mauvaise machine.
Dans mon cas, j'ai été en utilisant des certificats pour l'authentification avec certificateValidationMode réglé sur "PeerTrust" et j'avais oublié d'installer le certificat client dans windows store (LocalMachine\TrustedPeople) pour faire accepter par le serveur.
Dans mon cas, quand j'ai changé le
wshttpbinding
protocole dehttps
àhttp
il a commencé à travailler.Surtout cette exception se produit lorsqu'il y a quelques erreurs dans le serveur, le plus commun est une mauvaise configuration de l'authentification de base de données, ou d'authentification. Dans mon cas, il y a différentes synchronisation de l'horloge
assurez-vous que le client et le serveur ont les mêmes paramètres
Cliquez sur l'Heure en Bas à Droite côté -> "date de Modification des paramètres de temps..." -> "Temps Internet" tab -> Modifier les Paramètres... -> cocher la case "Synchroniser avec un serveur de temps internet" option, si elle est décochée ->
à partir du serveur menu déroulant, sélectionnez "times.windows.com" -> mise à Jour -> OK
J'ai aussi eu ce problème à partir d'un service de référence qui est de la date, même avec le serveur & client sur la même machine. De l'exécution "Service de mise à Jour de Référence" sera généralement fixer si c'est le problème.
Dans mon cas, j'ai été faire cette erreur sur la même machine, dans mon test de l'application client-serveur. Mais ce problème a été résolu par "Service de mise à Jour de Référence".
Juste pour le plaisir de partager... j'ai eu un cas rare qui me grattant l'arrière de ma tête pendant quelques minutes. Même quand le temps de l'inclinaison de la solution a été très précis, et j'ai eu ce problème résolu, cette fois-ci était différente. J'ai été sur un nouveau Win8.1 machine dont je me souviens avoir eu un fuseau horaire question et j'ai eu la régler manuellement le temps. Eh bien, j'ai gardé l'obtention de l'erreur, malgré l'heure qui s'affiche à la fois le serveur et le client avait seulement une diference en quelques secondes. Ce que j'ai fait est d'activer "l'été de l'enregistrement" (notez que je suis en effet en vertu de l'été, le gain de temps, mais a eu le temps d'installation manuellement) dans "la date et le temps de configuration", puis est allé à l'heure d'internet la section et dispos... le temps dans mon pc gardé exactement la même, mais l'erreur a disparu.
Espère que ce sera utile à quelqu'un!
Dans mon cas, il y a deux problèmes qui permettra de lever cette exception.
Noter que, de mon environnement utilise la connexion Unique (ou STS si vous préférez) pour authentifier un utilisateur par le biais de ASP.NET MVC site. MVC site, à son tour, fait un appel de service à mon point de terminaison de service en passant porteur du jeton qui il a demandé de STS serveur avec Bootstrap jeton précédemment. L'erreur que j'ai eu était quand j'ai fait un appel de service à partir de MVC site.
Le service WCF n'était pas configurée comme une partie de confiance dans mon SSO (ou STS si vous préférez).
De configuration du Service n'était pas configurée correctement. En particulier sur audienceUris nœud du système.identityModel. Il doit correspondre exactement au point de terminaison du service de l'url.
Assurez-vous que votre
SendTimeout
n'a pas écoulé après l'ouverture du client.J'ai été faire cette erreur en raison de la BasicHttpBinding pas l'envoi d'un compatible messageVersion pour le service, j'ai été appeler. Ma solution a été d'utiliser une liaison personnalisée comme ci-dessous
Essayer avec ceci:
HTML:
J'ai dû changer la SecurityMode de Message (WSHttpBinding), avant de il a travaillé. c'est à dire
Dans mon cas, c'est un paramètre sur le pool d'applications IIS.
Sélectionnez le pool d'applications --> Paramètres Avancés --> Set 'Activer les Applications 32 Bits" pour Vrai.
Puis recyclage de l'application de la piscine.
Dans mon cas, le serveur n'était pas correcte. J'ai donc changé le serveur Datetime paramètres pour Régler l'heure automatiquement et il a résolu le problème.