WCF Message d'Erreur échec de la vérification de la sécurité
Je vais essayer d'y aller avec un nouveau service WCF. Le service a été de travail avant la superposition de sécurité. Maintenant j'obtiens cette erreur:
An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.
Server stack trace:
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout)
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at MyProject.IntegrationSample.MyProjectService.IMyProjectService.GetData(Int32 value)
at MyProject.IntegrationSample.MyProjectService.MyProjectServiceClient.GetData(Int32 value) in C:\code\AdvancedFraudSolutions\MyProject4.0\MyProject.IntegrationSample\Service References\MyProjectService\Reference.cs:line 82
at MyProject.IntegrationSample.Program.Main(String[] args) in C:\code\AdvancedFraudSolutions\MyProject4.0\MyProject.IntegrationSample\Program.cs:line 22
At least one security token in the message could not be validated.
Et ce, dans le journal de suivi:
Message security verification failed.
Voici ma configuration de service:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicBinding">
<security mode="TransportWithMessageCredential"/>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="MyProject.IntegrationServices.MyProjectService" behaviorConfiguration="basicServiceBehavior">
<endpoint binding="basicHttpBinding" bindingConfiguration="basicBinding"
name="MyProjectServiceEndpoint" contract="MyProject.IntegrationServices.IMyProjectService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="basicServiceBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="UseAspNetRoles"
roleProviderName="AspNetSqlRoleProvider" />
<serviceCredentials>
<serviceCertificate findValue="MyServiceCert" x509FindType="FindBySubjectName" />
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="AspNetSqlMembershipProvider" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<diagnostics>
<messageLogging maxMessagesToLog="25000" logEntireMessage="true" logMessagesAtServiceLevel="false" logMalformedMessages="true"
logMessagesAtTransportLevel="true">
<filters>
<clear/>
</filters>
</messageLogging>
</diagnostics>
</system.serviceModel>
Voici mon client de test de code et de configuration:
static void Main(string[] args)
{
MyProjectServiceClient client = new MyProjectServiceClient();
client.ClientCredentials.UserName.UserName = "theuser";
client.ClientCredentials.UserName.Password = "thepass";
try
{
string result = client.GetData(100);
client.Close();
Console.WriteLine(result);
}
catch (Exception ex)
{
client.Abort();
PrintExceptionDetail(ex);
}
Console.ReadLine();
}
private static void PrintExceptionDetail(Exception ex)
{
StringBuilder detail = new StringBuilder();
while (ex != null)
{
detail.AppendLine(ex.Message);
detail.AppendLine(ex.StackTrace);
ex = ex.InnerException;
}
Console.WriteLine(detail);
Console.Write("Copy exception detail to clipboard? (y/n) ");
if (Console.ReadLine().ToLower() == "y")
{
Clipboard.SetText(detail.ToString());
}
}
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyProjectServiceEndpoint" 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="Text" 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://localhost:44306/MyProjectService.svc" binding="basicHttpBinding" bindingConfiguration="MyProjectServiceEndpoint"
contract="MyProjectService.IMyProjectService" name="MyProjectServiceEndpoint"/>
</client>
</system.serviceModel>
Vous pouvez voir que je suis en train d'utiliser basicHttpBinding, TransportWithMessageCredential de la sécurité et de l'Adhésion/le Rôle des fournisseurs pour l'authentification/autorisation.
Ce qui est développé à l'aide de IIS express et sera accueilli dans IIS.
Quelle est la cause de l'erreur?
See the inner FaultException for the fault code and detail.
Avez-vous regardé à l'intérieur,FaultException
? Cela peut être causé par un certain nombre de problèmes différents, sans savoir en quoi exactement est-à défaut, il sera très difficile à résoudre.- J'ai inclus toutes les exceptions en détail ci-dessus. De toute façon, j'ai trouvé le problème. Je vais poster une réponse ci-dessous.
Vous devez vous connecter pour publier un commentaire.
J'ai résolu ce problème en ajoutant la clé de l'ordinateur sur l'ordinateur hôte de service web.fichier de configuration.
Le journal de suivi du service n'a pas aidé. Il ne m'a donné "Message de vérification de sécurité a échoué.". Puis j'ai activé le service wcf journal des événements pour le service d'accueil web.fichier de configuration à l'aide,
J'ai eu la suivante dans l'application informatique du journal des événements qui ont contribué,
J'ai ensuite ajouté la clé de l'ordinateur à l'ordinateur hôte de service web.config et ça a fonctionné. Ci-dessous l'exemple de la machine à clé.
Références,
http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx
http://intrepiddeveloper.wordpress.com/2008/08/07/security-event-logging-auditing/
Il n'y a rien de mal avec ma configuration. Le problème a fini par être que j'ai été en utilisant un UserInstance de sqlserver express pour la composition et les rôles de base de données. Une fois que j'ai créé une base de données normalement, tout a commencé à travailler. Boiteux.
J'ai changé mon Système de Temps de l'Heure du Serveur. Maintenant sa fonctionne bien. Mais ce n'est pas la bonne méthode , si les utilisateurs d'autres pays ,alors ils doivent le temps de changement de l'heure du serveur. merci donc de tout suggérer la bonne méthode pour ce faire..
Il est plus probable en raison de l'heure entre le client et le serveur. La valeur par défaut, je crois, est de 5 minutes. Vous pouvez modifier le temps maximum d'inclinaison par la création d'une liaison personnalisée, ou vous pouvez simplement vérifier que les temps sont corrects.