2017-09-07 4 views
0

Nous devons implémenter un service WCF pour un client basé sur la spécification de service WSDL que le client nous a fournie. Nous devons implémenter le service afin qu'il ne puisse traiter qu'une seule requête à la fois. Il est facile de configurer le service donc avec des attributs de limitation, nous utilisons actuellement cette configuration.Comment contrôler les réponses du service WCF lorsque le service est occupé

<serviceThrottling maxConcurrentCalls="1" maxConcurrentInstances="1" maxConcurrentSessions="1" /> 

Mais le problème est, si le client fait une demande lorsque le service est occupé (le processus peut parfois prendre jusqu'à deux heures de temps pour traiter), leur demande sera délai d'attente. Mais le service IIS/WCF prendra toujours la requête en file d'attente. (Ceci est le problème de base!) Parce que les délais d'attente de la demande du client, ils font de nouvelles demandes et nous finissons par traiter les mêmes demandes plusieurs fois.

J'ai besoin soit

  1. Envoyer accepte 202 immédiatement le statut lorsque le client fait une demande mais toujours garder le traitement des demandes une à la fois. (mieux)
  2. Ne pas prendre la demande dans la file d'attente et laisser le délai d'attente de la demande comme il le fait maintenant ou envoyer le rejet immédiatement. (Ok)

Je pourrais aussi gérer si je pouvais faire découvrir la gestion du temps

  1. Combien de demandes il y a dans la file d'attente? (Si j'ai autorisé le traitement de plusieurs demandes, je pourrais rejeter les demandes qui arrivent alors que le service est occupé.)
  2. Quand la demande a-t-elle été faite à l'origine? (J'ai pu arrêter de traiter une requête qui vient de la file d'attente après un certain temps.)
+0

Il suffit de définir la valeur de délai appropriée dans la valeur de configuration, je suppose. –

+0

Bonjour, vous voulez dire du côté client? Malheureusement, nous n'avons pas le contrôle total sur la façon dont le client utilise le service. Ils ont dit qu'ils ont quelque chose comme huit minutes de délai d'attente actuellement, mais ce n'est souvent pas suffisant et pour une raison quelconque, ils ne peuvent pas l'étendre plus. Si vous voulez dire côté serveur, pouvez-vous m'aider avec ça? –

+0

Vous pouvez également spécifier cela de votre côté. Lorsque votre client trouve une référence de service, il crée son fichier de configuration en fonction de votre 'wsdl'. Donc, tous les paramètres peuvent être spécifiés par vous. –

Répondre

0

J'ai résolu ce problème en permettant plus d'appels simultanés et en maintenant la propre file d'attente concurrente dans mon propre code. Heureusement, cela semble fonctionner et c'est aussi la meilleure solution pour le consommateur. En d'autres termes, le problème de l'entreprise a été résolu, mais pas la façon dont j'essayais en premier lieu.