Immer 403 Forbidden-Fehler. Die HTTP-Anfrage war verboten, mit client-Authentifizierungsschema "Anonym"
Diesem Problem, das ich habe, nicht geschehen, für die Kunden, die auf unsere Dienstleistungen zugreifen, aber was ist konstant ist, dass, wenn die Fehlermeldung Auftritt, es geschieht auf die gleiche service-Aufruf für eine Handvoll Kunden.
Hier sind die details der Ausnahme:
System.ServiceModel.Sicherheit.MessageSecurityException Die HTTP-Anforderung
wurde verboten mit client-Authentifizierungsschema "Anonym".
System.ServiceModel.Sicherheit.MessageSecurityException: HTTP
Anfrage war verboten, mit client-Authentifizierungsschema "Anonym".
> ---> System.Net.WebException: Der Remoteserver hat einen Fehler zurückgegeben: (403) Verboten. System.Net.HttpWebRequest.GetResponse() an
System.ServiceModel.- Kanäle.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan
timeout) --- Ende der inneren Ausnahme-stack-trace - - - - Server
stack trace: bei
System.ServiceModel.Security.IssuanceTokenProviderBase1.DoNegotiation(TimeSpan
1.ClientSecurityChannel
timeout) at
System.ServiceModel.Security.SspiNegotiationTokenProvider.OnOpen(TimeSpan
timeout) at
System.ServiceModel.Security.TlsnegoTokenProvider.OnOpen(TimeSpan
timeout) at
System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan
timeout) at
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan
timeout) at
System.ServiceModel.Security.CommunicationObjectSecurityTokenProvider.Open(TimeSpan
timeout) at
System.ServiceModel.Security.SecurityUtils.OpenTokenProviderIfRequired(SecurityTokenProvider
tokenProvider, TimeSpan timeout) at
System.ServiceModel.Security.SymmetricSecurityProtocol.OnOpen(TimeSpan
timeout) at
System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan
timeout) at
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan
timeout) at
System.ServiceModel.Channels.SecurityChannelFactory1.OnOpen(TimeSpan
1.ClientSecuritySessionChannel.OnOpen(TimeSpan
timeout) at
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan
timeout) at
System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.DoOperation(SecuritySessionOperation
operation, EndpointAddress target, Uri via, SecurityToken
currentToken, TimeSpan timeout) at
System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.GetTokenCore(TimeSpan
timeout) at
System.IdentityModel.Selectors.SecurityTokenProvider.GetToken(TimeSpan
timeout) at
System.ServiceModel.Security.SecuritySessionClientSettings
timeout) bei
System.ServiceModel.- Kanäle.CommunicationObject.Open(TimeSpan
timeout) bei
System.ServiceModel.- Kanäle.ServiceChannel.OnOpen(TimeSpan-timeout)
System.ServiceModel.- Kanäle.CommunicationObject.Open(TimeSpan
timeout) bei
System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel
channel, TimeSpan timeout) bei
System.ServiceModel.- Kanäle.ServiceChannel.CallOnceManager.CallOnce(TimeSpan
timeout, CallOnceManager cascade) bei
System.ServiceModel.- Kanäle.ServiceChannel.EnsureOpened(TimeSpan
timeout) bei
System.ServiceModel.- Kanäle.ServiceChannel.Call(String Aktion,
Boolean oneway, ProxyOperationRuntime operation, Object[] ins,
Object[] outs, TimeSpan timeout) bei
System.ServiceModel.- Kanäle.ServiceChannel.Call(String Aktion,
Boolean oneway, ProxyOperationRuntime operation, Object[] ins,
Object[] outs) bei
System.ServiceModel.- Kanäle.ServiceChannelProxy.InvokeService(IMethodCallMessage
methodCall, ProxyOperationRuntime-Betrieb) bei
System.ServiceModel.- Kanäle.ServiceChannelProxy.Invoke(IMessage
Nachricht) Ausnahme erneut ausgelöst, auf [0]: bei
System.- Laufzeit.Remoting.Proxys.RealProxy.HandleReturnMessage(IMessage
reqMsg, IMessage retMsg) bei
System.- Laufzeit.Remoting.Proxys.RealProxy.PrivateInvoke(MessageData&
msgData, Int32-Typ) an
> Proxy.FileTransferService.IFileTransferService.EstablishProxy(DownloadRequest
Anfrage) bei Proxy.FileTransferService.FileTransferServiceClient.
Proxy.FileTransferService.IFileTransferService.EstablishProxy(DownloadRequest
request) an NormalFileTransferServiceClient.Download(Int32
packageId, IStreamWriter downloader, Archivar Archivar) an
LoggingFileTransferServiceClient.Download(Int32 packageId, Tritt
Diese Ausnahme wird ausgelöst, indem der Kunde.
Den client-proxy-Konfiguration für IFileTransferService ist:
<binding name="WSHttpBinding_IFileTransferService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Mtom"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
<endpoint address="http://[hostname]/FileTransferService.svc/FileTransfer"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IFileTransferService"
contract="Proxy.FileTransferService.IFileTransferService"
name="WSHttpBinding_IFileTransferService">
<identity>
<certificate encodedValue="a long string"/>
</identity>
</endpoint>
Der service-Konfiguration
<service behaviorConfiguration="ServiceBehavior"
name="Services.FileTransferService">
<endpoint name="WSHttpBinding_IFileTransferService"
binding="wsHttpBinding"
bindingConfiguration="MtomWSHttpBinding"
contract="Services.IFileTransferService"
address="/FileTransfer"/>
<endpoint binding="basicHttpBinding"
bindingConfiguration="FileTransferServicesBinding"
contract="Services.IFileTransferService"/>
<host>
<baseAddresses>
<add baseAddress="http://[hostname]/FileTransferService.svc"/>
</baseAddresses>
</host>
</service>
<binding name="wsHttpBinding"
maxReceivedMessageSize="2147483647"
receiveTimeout="5"
useDefaultWebProxy="false">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
<basicHttpBinding>
<binding name="FileTransferServicesBinding"
maxReceivedMessageSize="10067108864"
messageEncoding="Mtom"
transferMode="Streamed"
useDefaultWebProxy="false">
<security mode="None">
<message clientCredentialType="UserName" />
</security>
</binding>
</basicHttpBinding>
Hinweis: einige Kunden sind mit der basicHttpBinding (wenn ich alles richtig). In späteren client-Version, die möglicherweise nicht vollständig verteilt (das ist, warum ich die support-2-version), änderte ich den proxy zu verwenden, das wsHttpBinding Endpunkt statt. Ich Frage mich, ob diese Fehler, ich bin immer spezifisch für basicHttp und wenn ja, vielleicht habe ich nicht diese Konfigurationen korrekt eingerichtet ist. Ich bin unter der Annahme, dass die clients immer diese Fehler 403 sind mit wsHttpBinding.
Hier ist der code für den service:
public RemoteBinaryInfo EstablishProxy(DownloadRequest request)
{
int packageId = request.PackageId;
System.IO.MemoryStream stream = new System.IO.MemoryStream(packageRepository.GetPackageBinary(packageId));
DisposeStreamWhenOperationIsComplete(stream, OperationContext.Current);
RemoteBinaryInfo result = new RemoteBinaryInfo();
result.Length = stream.Length;
result.MemoryByteStream = stream;
return result;
}
private static void DisposeStreamWhenOperationIsComplete(System.IO.MemoryStream stream, OperationContext clientContext)
{
clientContext.OperationCompleted += new EventHandler(delegate(object sender, EventArgs args)
{
if (stream != null)
stream.Dispose();
});
}
Hat jemand wissen, wenn das loswerden von dieser Ausnahme ist etwas, was innerhalb meiner Kontrolle? Gibt es irgendwelche änderungen an der Konfiguration, die ich machen kann auf entweder der client-oder service-config-Dateien?
Wenn Sie brauchen mehr Informationen von mir bitte lass es mich wissen.
- Wenn nicht schon geschehen, sollten Sie versuchen, stellen Sie eine einfache "hello world" - Methode, um das problem einzugrenzen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In meinem Fall dieser Fehler wurde von unserer Organisation HTTP-proxy-server. Fand es aus:
MessageSecurityException.InnerException.Response.Headers
:{Mime-Version: 1.0
X-Squid-Error: ERR_ACCESS_DENIED 0
X-Cache: MISS from <
X-Cache-Lookup: KEINER von < proxy-server-Adresse>
Proxy-Connection: close
Content-Length: 2165
Content-Type: text/html
Datum: Wed, 25 Apr 2012 10:55:39 GMT
Server: squid/3.0.STABLE25
Via: 1.0 < proxy-server-Adresse> (squid/3.0.STABLE25)
}
In meinem Fall auch er trat für eine file-transfer-Methode überträgt die Datei-chunks in einem
byte
array der Größe 16384. Auf die Verringerung der Größe der 10000, der Fehler wurde behoben. Dies bedeutet, dass die proxy-server hatte eine Art Größenbeschränkung festgelegt.Auf einem Rechner mit direktem internet-Zugang, Datei-transfer-Methode noch nie versagt mit diesem Fehler, auch für die array-Größe > 16384.
Da nur einige Ihrer Kunden stehen vor dieser Frage, vielleicht sind Sie hinter einer firewall /proxy-server, den man eigentlich sperren Sie den Zugriff und die Rückkehr dieser Fehler?
Es klingt für mich wie die Kunden erhalten MessageSecurityException sind nicht gemacht, um einen gültigen Benutzernamen/Passwort mit Ihrer Anfrage.
Finden Sie in der folgenden msdn-Thema http://msdn.microsoft.com/en-us/library/ms733131.aspx
Also Sie haben einen web service konfiguriert im IIS die Anonyme Authentifizierung verwenden, und Sie bekommen einen 403 forbidden-Fehler nur für eine Handvoll Nutzer.
Aus meiner eigenen Erfahrung, dies wird normalerweise verursacht durch eine access denied exception beim Zugriff auf ein ACL-gesteuerte system-Ressourcen wie das Dateisystem.
Jeden Benutzer eine Verbindung mit ungewöhnlich wird Ihre Anfrage bearbeitet (vorausgesetzt, IIS 7) durch die w3wp.exe Prozess, hat in der Regel die Identität des Anwendungspools (IIS APPPOOL/AppPoolName), wenn diese Identität nicht Hinzugefügt jede gewünschte access-control-Listen eine access denied exception bewirkt, dass IIS antwortete mit einem 403-Fehler.
Ich normalerweise fügen Sie die Identität des Anwendungspools zu einer Gruppe, dann fügen Sie die Gruppe auf, alle erforderlichen Ressourcen.
Wenn Sie nicht herausfinden können, welche Ressourcen verursachen könnte, dass das eine Ausnahme ist, versuchen Suche in das Ereignisprotokoll "Sicherheit" für "Audit Failure" - Einträge für die Hinweise. Sie müssen möglicherweise die Konfiguration der lokalen Sicherheitsrichtlinie-log security-events.
Glück