Dans l'un des didacticiels de la WCF, j'ai vu le code d'échantillon suivant: est le moyen correct de garantir que les ressources (c.-à-d. Les connexions) sont libérées, même sous conditions d'erreur? p> p>
4 Réponses :
J'ai eu bonne chance avec ce modèle:
Dim service As New MyService()
Dim closed As Boolean = False
Try
service.Open()
If Not service.State = ServiceModel.CommunicationState.Opened Then
''Handle a not-opened state here
End If
service.MyMethod()
service.Close()
closed = true
Catch ex As Exception
''Handle errors here
Finally
If Not closed Then
service.Abort()
End If
End Try
service = Nothing
Vous avez l'idée générale correcte. J'ai utilisé la méthode de prolongation suivante pour conserver au minimum les lignes de code répétitif. exemple de code à l'aide de cette méthode d'extension: p> bien sûr c'est c #, mais je pense que cela devrait toujours être utile. p> p>
Voir indisposable: WCF GOTCHA # 1 * sup>, où il propose une méthode d'emballage pratique: utilisation: p> Service<IOrderService>.Use(
orderService =>
{
orderService.PlaceOrder(request);
});
J'aime votre solution, mais en avez-vous un, qui peut être utilisé avec une injection de dépendance. Étant donné qu'un service est une dépendance, je ne veux pas exécuter mon test contre elle.
Ce n'est pas ma solution. Dans tous les cas, je m'attends à ce que vous puissiez créer un Service canalysory iCLientChannel code>.
Si vous utilisez un cache côté client, vous pourriez envisager d'utiliser des arbres d'expression (voir Product p = GetItem((client, identifier) => client.GetProduct(identifier), new CatalogServiceClient(), 123);
Rob, je ne vois pas comment votre réponse s'applique à cette question.
Peut-être que l'exemple de méthode que j'ai donné est un peu trop spécifique pour une enveloppe d'appel de service générique. En réalité, vous avez besoin de surcharges de méthodes pour des méthodes de service qui prennent plus d'un paramètre et cet exemple ne va pas dans ce détail. Cependant, de nombreuses solutions WCF contiennent des groupes de méthodes très similaires qui renvoient simplement des types différents en réponse à un paramètre ID avec un paramètre d'identification. Et vous avez raison que mon dernier bloc manque également un essai imbriqué / enfin pour l'avortement.
Je pense que vous devrez peut-être lire la question de nouveau. Votre réponse ne résout pas la question de quelque manière que ce soit.