2009-05-11 11 views
2

Ich erhalte verschiedene Fehler mit einem WCF-Dienst. Dieser Service hat bisher in allen unseren Testumgebungen funktioniert. Normalerweise läuft es unter IIS 6 unter Windows Server 2003. Ich hatte es unter einer Windows XP Pro-VM ausgeführt, die mit unserer Unternehmensdomäne verbunden war. Unser IT-Experte hat die VM kürzlich aus der Unternehmensdomäne entfernt.WCF 403 Fehler

Jetzt erhalte ich Fehler wie diese:

An existing connection was forcibly closed by the remote host.

The remote server returned an error: (403) Forbidden.

The HTTP request was forbidden with client authentication scheme 'Anonymous'.

IIS konfiguriert ist, den anonymen Zugriff zu ermöglichen. Der IIS-Benutzer verfügt außerdem über die Berechtigung zum Anzeigen/Ausführen im Dienstordner.

Der Dienst funktioniert für einige Anrufe, aber nicht für andere. Die Anwendung ruft den Dienst beim Laden auf, später jedoch in einem separaten Aufruf.

Der Dienst wird mit wsHttpBinding:

<wsHttpBinding> 
    <binding name="wsHttpBindingSettings" maxReceivedMessageSize="2147483647"> 
     <security mode="None"> 
     <transport clientCredentialType="None" /> 
     <message establishSecurityContext="false" /> 
     </security> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </wsHttpBinding> 
+0

Ich nahm meinen einen Bereich heraus, in dem ich Threading machte, um auf etwas im Service zuzugreifen.Es beantwortet die Frage immer noch nicht, aber zumindest funktioniert mein Code jetzt. Ich verstehe nicht, warum der Code gut funktioniert, wenn der Dienst lokal und in unserer Windows Server 2003-Box ausgeführt wird, aber nicht in unserer XP Pro VM. –

Antwort

1

Ich denke, der Schlüssel zu diesem Problem war, dass es in IIS 5 unter Windows XP ausgeführt wurde. IIS 5 in XP hat eine maximale Anzahl von Verbindungen von 10. Sobald wir dieses Limit überschritten haben, glaube ich, dass wir 403 Fehler erhalten haben. Wir haben dieses Problem behoben, indem wir eine Server 2008 VM anstelle von XP für Demos auf einem Laptop verwendet haben.

0

Der Service für einige Anrufe funktioniert gut, aber nicht für andere. Die Anwendung ruft den Dienst beim Laden auf, später jedoch in einem separaten Aufruf.

Vielleicht haben die Anrufe, die funktionierten, keine sensiblen Operationen ausgeführt, wie den Zugriff auf DBs oder Dateien? Unter welcher Berechtigung wird der IIS-Anwendungspool ausgeführt? Verwendet er den Identitätswechsel des Clients? Das würde erklären, das Problem ..

Auch sollten Sie diese Einstellung, um zu versuchen:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="xyz"> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="True"/> 
+0

So ziemlich jeder Anruf macht sensible Operationen. Ich glaube nicht, dass irgendwelche Probleme verursachen. Ich habe inclusiveExceptionDetailsInFaults bereits aktiviert und bekomme keine weiteren Details. Ich bin mir jedoch nicht sicher über den IIS-Anwendungspool. –

0

gleiche Problem hier, ich habe das Problem gemildert durch eine Standard-Zugabe zu dem Endpunkt Bindung und explizit die Sicherheitseinstellung Level auf "None", wo es möglich ist, jetzt funktioniert es besser, aber wenn Anrufe zu häufig zum Server gemacht werden, scheitert es wieder, ich habe auch bemerkt, dass der Entwicklungs-Webserver in VS2008 selbst bei sehr hohem Frequenzaufruf nie ausfällt. so sollte es in irgendeiner Weise mit IIS in Verbindung stehen und ich vermute, dass etwas mit der Dauer des Sicherheitskontextes zusammenhängt, aber das sind nur meine Vermutungen bisher, ich habe keine echte Lösung gefunden

+0

Probleme erscheint nur mit der IIS-Version auf XP, nächste IIS-Version (z. B. auf Windows-Server 2003) funktioniert in jeder Bedingung –

0

Es kann verursacht werden durch eine Kombination von Sicherheitseinstellungen in IIS und web.config.

Wenn die Einstellungen in IIS integriert und anonym waren und die Einstellungen in web.config auf Windows festgelegt wurden, mit impersonate = false.

Dann, wenn die Maschine in der Domäne war, würde integrierte Authentifizierung verwendet werden, und alles würde OK funktionieren.

Wenn der Computer aus der Domäne entfernt wurde, wird die anonyme Authentifizierung verwendet, und dann wird der anonyme IIS-Benutzer für den Zugriff auf die Ressourcen verwendet. Dieser Benutzer hat eingeschränkte Rechte und daher können einige Anrufe fehlschlagen.

Sie könnten die Einstellung in web.config in impersonate = false ändern, dies würde bedeuten, dass die Identität des Anwendungspools für den Zugriff auf Ressourcen verwendet wird.