Sto seguendo i principi del seguente post sul blog e sto ottenendo il comportamento che mi aspetto quando eseguo il debug del servizio WCF utilizzando il server Web incorporato di Visual Studio 2010.Perché IIS 7 non restituisce errori JSON? Funziona su * my * machine
http://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/
Quando la mia applicazione genera un FaultException(), posso vedere la rappresentazione JSON di quella colpa sulla mia macchina locale. L'applicazione restituisce anche il HttpStatusCode appropriato (in questo caso, 401 Non autorizzato), che è il comportamento desiderato.
{"Code":"UserNotLoggedInFault","DisplayText":"You must be logged in to access this resource.","InternalText":"User is not logged in"}
Quando schiero la mia domanda di IIS 7.0, però, ho la HttpStatusCode corretto, ma il codice HTML restituito è il testo generico che viene associato al codice di stato:
Non hai il permesso per visualizzare questa directory o pagina.
Poiché ciò funziona localmente, presuppongo che il problema sia un'impostazione di configurazione IIS. Ho già rimosso IIS: Valori pagine di errore che intercettavano stati di errore (utilizzato per restituire HTML formattato da% SystemDrive% \ inetpub \ custerr \\ 401.htm)
Qualcuno sa quali sono le impostazioni di IIS che è necessario modificare consentire alla risposta JSON di passare quando viene restituito uno stato HTTP al di fuori dell'intervallo 200? ... o forse c'è qualcos'altro che devo fare?
UPDATE # 1
Questo appare solo accadere quando la mia applicazione genera un FaultException che imposta anche il HttpStatusCode per Unauthorized (401). Se la mia applicazione restituisce un codice di stato 404 non trovato, il JSON viene restituito correttamente.
La domanda è valida, ma suppongo che si applichi solo alla restituzione di un codice di stato non autorizzato 401.
Ecco alcuni screenshot della risposta come catturato da Charles proxy Web
Ecco quello che sembra quando ho colpito mia macchina locale
UPDATE # 2
Quindi questo è non si verifica se ho il desktop remoto nel server e colpisco il sito tramite localhost. Quando raggiungo l'URL che richiede l'autenticazione, viene restituito l'oggetto JSON corretto.
Quindi questo significa che IIS tratta 401 codice di stato in modo diverso e che gli utenti non autenticati sono schermati dalla risposta adeguata?
Qual è il tuo hosting locale - IIS o IIS Express? Sei in grado di ottenere risposte da altri siti sul server? – Regfor
Localmente, eseguo WebDev.WebServer40.exe. Sul mio server IIS 7 di Windows Server 2008, posso POST e ottenere oggetti JSON e tutto funziona alla grande, tranne quando lancio una FaultException. Quando lo lancio localmente, ottengo la struttura JSON. Quando lo lancio sulla mia casella di Windows Server/IIS, ottengo il messaggio "Non hai l'autorizzazione per visualizzare questa directory o pagina". risposta. – JackAce
E le altre app web o servizi dal server. Sei in grado di effettuare chiamate HTTP riuscite a qualcos'altro dal server? – Regfor