Primeiro cookie do WCF 4.0 primeiro é gravado pelo navegador
Eu estou trabalhando na maneira mais rápida de escrever cookies de um serviço REST de aplicativo de console auto-hospedado do WCF com WebHttpBinding. Eu preparo o "Set Cookies", mas apenas o primeiro cookie é definido no navegador (usando o FireFox 11.0 no Windows), bem como o valor "Expires".
<code>var expiry = DateTime.Now.AddMonths( 6 ); var outresp = WebOperationContext.Current.OutgoingResponse; outresp.Headers.Add( HttpResponseHeader.SetCookie , "cookie1=fd9416ea-2705-4d44-be76-f2f7b95e6b13; cookie2=7d489e69-d9c9-4b8d-a4b1-bce0da1c5966;expires=" + expiry ); </code>
Eu também tentei colocar uma vírgula entre o primeiro cookie e o segundo, que também não funcionou:
<code>outresp.Headers.Add( HttpResponseHeader.SetCookie , "cookie1=fd9416ea-2705-4d44-be76-f2f7b95e6b13;, cookie2=7d489e69-d9c9-4b8d-a4b1-bce0da1c5966;expires=" + expiry ); </code>
Eu cortei isso e liguei o Fiddler:
<code>outresp.Headers.Add( HttpResponseHeader.SetCookie , "foo=foovalue;,bar=barvalue;" ); </code>
e Fiddler mostra isso:
<code>Response sent 27 bytes of Cookie data: Set-Cookie: foo=foovalue;,bar=barvalue; This response did not contain a P3P Header. Validate P3P Policies at: http://www.w3.org/P3P/validator.html Learn more at: http://www.fiddler2.com/redir/?id=p3pinfo </code>
O que me diz que não estou formatando coisas no lado do .NET para tornar os cookies aceitáveis para o navegador.
Como posso obter todos os cookies no navegador de apenas o primeiro valor? O que eu perdi?
Obrigado.
[EDITAR]
Eu levei a questão para a Microsoft para obter suporte e aprendi isso:
O fato de que "Set-Cookie" é inserido em uma única linha de cookie é registrado como um bug dentro da Microsoft para o .NET Framework 4.0 e também para o Framework 4.5. Dentro do grupo de desenvolvimento do Microsoft WCF, o erro é listado como "fechado" e "não corrigido".
De acordo com a Microsoft, a única solução é passar de auto-hospedado para hospedagem no IIS e, em seguida, usar diretamente o objeto Response (IIS) (caminho de código diferente que não possui o bug).