Existem quaisquer garantias sobre quando o IIS pode reciclar durante o processamento de uma operação de WCF 1-way?

StackOverflow https://stackoverflow.com/questions/326382

  •  11-07-2019
  •  | 
  •  

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top