Existem quaisquer garantias sobre quando o IIS pode reciclar durante o processamento de uma operação de WCF 1-way?
Pergunta
Fundo
Esta questão é em duas partes.
Eu tenho uma operação de WCF unidirecional hospedado no IIS 6. O seguinte é o meu entendimento de como funciona este:
_1. IIS recebe um pedido.
_2. IIS envia uma resposta HTTP 202 (obrigado, eu vou processar este mais tarde).
_3. IIS chama minha operação WCF unidirecional.
Agora, o controle passa para a minha operação WCF que faz o seguinte:
_4. Persistir a informação solicitação para um transacional, armazenar durável.
_5. Iniciar o processamento do pedido no banco de dados OLTP.
_6. Se há um erro, repita a partir do passo 5, ou tomar algumas medidas correctivas, em seguida, limpeza dos dados persistiu na etapa 4.
Pergunta 1
É minha compreensão de quando o IIS envia a resposta HTTP 202 correto?
Pergunta 2
Se o IIS recicla entre as etapas 2 e 4, eu poderia perder as informações do pedido antes que eu tenha uma mudança de persistir, mas depois que o cliente pensa que eu aceitei a mensagem. Existem quaisquer garantias prestadas pelo IIS sobre quando ele vai ou não vai reciclar quando há pedidos pendentes?
PS: Por favor, desculpe a formatação desonesto. Por alguma razão remarcação foi totalmente estragar os meus itens lista numerada.
Solução
Eu não tenho certeza que sua suposição é correta.
Mesmo para interação one-way, WCF pode ficar muito invovled antes do 202 é devolvido; se você usar a autenticação, por exemplo, tudo tem que acontecer antes que o método é chamado e antes 202 é devolvido, de modo que se houver algum problema eles podem ser relatados.
Se você usar wsHttpBinding, por exemplo, fora da caixa, você verá 2-3 trocas de mensagens, resultando em 200 antes de chamar o método actual. esta é a informação de segurança de troca e estabelecer contexto de segurança.
Na verdade, se você configurou o serviço para ter nenhuma segurança, isso não vai acontecer e ele irá retornar 202 imediatamente, mas isso sugere que ele tem de saber se ele pode fazer isso a partir da pilha WCF.
Tudo isso de lado - eu não estou certo o que você está tentando alcançar - que o IIS reciclagem que você se refere? Eu não sou de todo um especialista em IIS, mas eu duvido que ele iria reciclar o anfitrião quando algo está executando ativamente; se você está se referindo a ninguém restrting manualmente o pool de aplicativos (ou IIS, ou a máquina para que o assunto) Eu duvido que haja muito o que fazer.
Se você tem de saber com certeza que uma mensagem não se perde a única forma que conheço para guarentee que é através do emprego de mensagens confiável, de uma forma ou de outra, que só reconhece pedidos uma vez persistiu em uma loja durável;
Outras dicas
Na minha opinião, há um par de coisas que eu sugeriria:
A única maneira que eu conheço para gerenciar a reciclagem do processo no IIS é olhar para o pool de aplicativos o seu web site está usando. Se você abrir o Gerenciador de IIS -> Pools de Aplicativos -> selecione sua piscina, em seguida, propriedades clique com o botão direito, na guia Reciclagem existem opções lá que podem ajudar você. Eu acho que isso não garante que você não vai solicitações perder em um reciclar, mas a definição de um tempo mais longo reduzir a probabilidade de tal caso a.
No entanto, parece que o tipo de sistema que você está olhando para construir é um candidato ideal para MSMQ, que pode fornecer solicitações de serviços assíncronos que estão em fila corretamente com muito pouca sobrecarga ou canalização manual. Isso permitiria que você a evitar todo o problema de reciclagem de processo inteiramente. Eu não tenho certeza se isso é uma opção para o seu cenário, mas pode ser algo para olhar.