Attualmente sto migrando il mio servizio RESTful WCF da .NET 3.5 (Starter Kit) a .NET 4. Ho iniziato il mio progetto utilizzando un modello di servizio Rest WCF da Visual Studio 2010. Ho dovuto capire come mantenere il mio schema di autorizzazione (formalmente fatto con RequestInterceptor) usando ServiceAuthorizationManager. Dopo un po 'di lavoro e di ricerche, l'ho fatto. Ma ora ho un problema collaterale. Il mio servizio è stato utilizzato per segnalare al mio cliente eventuali errori di elaborazione utilizzando il codice di stato HTTP e una breve descrizione. Stavo usando WebOperationContext in molti punti della mia metodo di servizio per descrivere ai clienti cosa è andato storto, come questo:WCF 4 Il servizio REST non può restituire una descrizione stato, solo StatusCode
protected void returnCode(HttpStatusCode code, string description)
{
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusDescription = description;
ctx.OutgoingResponse.StatusCode = code;
}
Ma in WCF 4, solo StatusCode funziona - StatusDescription fallisce silenziosamente. Non riesco a capire perché. La mia unica ipotesi è che WebOperationContext non funzioni in questo nuovo scenario di WCF 4, e invece dovrei usare OperationContext, ma anche questo non funziona. Il seguente metodo è usato nella mia classe personalizzata che estende ServiceAuthorizationManager, informare i clienti di una richiesta non poteva essere l'accesso a causa di autenticazione Digest era malformato:
private void GenerateBadDigestMessage(ref OperationContext operationContext)
{
Message reply = Message.CreateMessage(MessageVersion.None, null, null, new DataContractJsonSerializer(typeof(object)));
HttpResponseMessageProperty hrp = new HttpResponseMessageProperty();
hrp.StatusCode = HttpStatusCode.Forbidden;
hrp.StatusDescription = "bad digest";
reply.Properties[HttpResponseMessageProperty.Name] = hrp;
operationContext.RequestContext.Reply(reply);
operationContext.RequestContext = null;
}
Anche utilizzando OperationContext direttamene qui (invece di WebOperationContext), StatusDescription non lo fa lavoro.
Cosa mi manca qui? Perché una cosa così piccola può andare da .NET 3.5 a 4?
Self-hosted o IIS? Quale versione del server? Ho provato questo su 4.0 con Server 2008R2 self-hosted, e funziona bene (restituisce la descrizione dello stato come impostato). – nitzmahone
Hai mai trovato una soluzione? Sono di fronte allo stesso problema. – Hemant