WCF-Error - Message-security verification failed
Ich versuche zu bekommen, gehen mit einer neuen WCF-Dienst. Der service war vor der Arbeit Schichtung auf Sicherheit. Jetzt bin ich immer dieser Fehler:
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.
Und diese in das trace-Protokoll:
Message security verification failed.
Hier ist mein service-Konfiguration:
<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>
Hier ist mein test-client-code und Konfiguration:
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>
Können Sie sehen, dass ich versuche, "basicHttpBinding", TransportWithMessageCredential Sicherheit, und Mitgliedschaft/Rolle-Anbietern für die Authentifizierung/Autorisierung.
Diese entwickelt wird mit IIS express und der in IIS gehostet werden soll.
Was ist die Ursache der Fehler?
See the inner FaultException for the fault code and detail.
Haben Sie schaute auf die innereFaultException
? Dies kann verursacht werden, von einer Reihe von verschiedenen Fragen, so ohne zu wissen was genau kaputt ist es wird sehr schwierig sein, zu beheben.- Ich habe alle Ausnahmen detailliert vor. Wie auch immer, ich habe das problem gefunden. Ich poste die Antwort unten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich dieses Problem behoben, indem die Maschine-Taste auf dem service-host web.config-Datei.
Den Dienst-Ablaufverfolgungsprotokoll hat nicht geholfen. Es gab mir die Meldung "security verification failed.". Dann aktivierte ich den wcf-Dienst Ereignis-Protokoll für die web-service-host.config-Datei mit dem
Habe ich die folgenden in der computer-Anwendung-Ereignisprotokoll, die geholfen haben,
Ich dann die machine-Taste, um die service-host web.config und es funktionierte. Unten ist die sample-Maschine-Taste.
Referenzen,
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/
Gab es nichts falsch mit meiner Konfiguration. Das problem war, dass ich mit einem UserInstance von sqlserver express für die Mitgliedschaft und die Rollen-Datenbank. Einmal erstellte ich eine Datenbank normalerweise alles begann. Lame.
Änderte ich mein System von Zeit zu Zeit-Server. Jetzt seine Arbeit Gut. Aber es ist keine gute Methode , wenn Benutzer aus anderen Ländern sind ,dann müssen Sie Zeit ändern, um die server-Zeit. also bitte jede ein Hinweis auf eine gute Methode, dies zu tun..
Ist es wahrscheinlich aufgrund der Zeit zwischen dem client und dem server. Die Standard-ich glaube, die ist 5 Minuten. Sie können ändern Sie die max Schräglage durch die Erstellung einer benutzerdefinierten Bindung, oder Sie können einfach überprüfen, ob die Zeiten korrekt sind.