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.