2012-11-21 12 views
5

Abbiamo un servizio WCF ospitato in IIS. Riesco a vedere dai file di registro che un client che invia una richiesta che impiega più di 3 minuti per l'esecuzione riceve un errore HTTP 503 (Servizio non disponibile).Come si modifica il timeout su un servizio WCF ospitato da IIS?

Come cambio il timeout? Per testarlo, ho ridotto il timeout a 3 secondi per assicurarmi che fosse effettivamente scaduto.

Ho provato

<system.web> 
    <httpRuntime executionTimeout="3"/> 
</system.web> 

che sembrava non fare nulla.

Ho anche provato a cambiare il binding senza successo.

<basicHttpBinding> 
    <binding name="basicHttp" receiveTimeout="00:00:03" sendTimeout="00:00:03" > 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" /> 
     <message clientCredentialType="UserName" algorithmSuite="Default" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 

Nota, sto cercando di ottenere il servizio WCF per restituire una sorta di errore dopo una durata controllata da noi. Non mi aspetto che la richiesta abbia richiesto più tempo del previsto.

Qualsiasi aiuto più apprezzato prima di strapparmi i capelli.


Giusto per chiarire ...

Il servizio è stato installato e funzionante per un paio di mesi. Ma quando si elabora la richiesta occasionale di lunga durata, il client riceve una risposta HTTP 503 dopo 3 minuti. Sullo sfondo possiamo vedere che la richiesta è stata correttamente elaborata ma ha impiegato> 5 minuti. Ovviamente a questo punto è troppo tardi poiché il client ha già ricevuto una risposta di errore.

Altre richieste vengono elaborate normalmente.

Il carico sul sistema a questo punto è molto basso. In effetti, questo è un ambiente di test e le transazioni sono una alla volta senza sovrapposizioni.

Sono anche abbastanza sicuro che i collegamenti siano collegati ai punti finali. Ho aperto il file di configurazione nell'Editor di configurazione WCF e tutto è collegato correttamente.

È persino possibile configurare un timeout a questo punto in WCF? In modo che capisca se non, ma allora perché viene restituito un errore HTTP 503?

Tutto quello che ci piacerebbe veramente fare è controllare il periodo di tempo prima che venga restituita la risposta 503.

+0

Hai mai pensato di eseguire questo in modo asincrono e interrogare il risultato? – ChrisBint

+0

Il servizio è in produzione da un po 'di tempo e quel tipo di cambiamento non accadrà nel prossimo futuro. Per il momento, vogliamo solo controllare la durata del timeout. – illusio

+0

Se il servizio ha un errore di binding (senza una gestione speciale), il client vedrà solo un errore http. Se si modificano i timeout del proxy client su 3 secondi, il client dovrebbe vedere l'eccezione di comunicazione prevista. – ErnieL

risposta

1

Dopo molti esperimenti in IIS e un servizio WCF di test, non sono riuscito a riprodurre il problema, nemmeno sullo stesso server. Il problema è visto solo da un altro gruppo all'interno dell'azienda.

L'unico modo ho potuto forzare un HTTP 503 errore è stato quello di prendere il pool di app offline ma questo gli errori prevedibilmente causati da restituire immediatamente quando una richiesta è venuto in.

Ulteriori indagini hanno dimostrato che il codice HTML associato al La risposta 503 proveniente da IIS era diversa da quella restituita al client.

Ammettiamo che questo non è ancora dimostrato, ma abbiamo concluso che il problema è causato da alcuni componenti di rete tra il client e il server.

C'era effettivamente un proxy tra quello che stava restituendo il timeout.

1

Normalmente quando eseguo una modifica in un'associazione che non ha alcun effetto sull'endpoint del servizio, è perché l'associazione non è collegata all'endpoint.

Se tutto sta ricevendo ora 503 e ha funzionato in precedenza, è possibile che l'account utente che è l'identità del pool di applicazioni abbia una password scaduta.

Se funziona per alcune chiamate e non per altre e il carico è aumentato, è possibile che i client non chiudano le connessioni e che si raggiunga il limite predefinito per il numero massimo di chiamate simultanee.

+0

Grazie per aver risposto a Shiraz. Ho ampliato la mia domanda in risposta. I miei pensieri iniziali erano gli stessi, che il binding non è in realtà un riferimento, ma sono abbastanza sicuro che sia ok. E gli errori 503 vengono restituiti solo quando la transazione richiede> 3 minuti per l'elaborazione. – illusio

Problemi correlati