Service Web ou une DLL?
Je suis en création d'une application qui doit être accessible à la fois par un front-end web hébergé sur un réseau interne et également exécuter une tâche planifiée. Rien ne devra être accessible à l'extérieur de nos systèmes internes et une fois que l'application est en place et en cours d'exécution, nous ne voyons rien de changer pour un certain temps.
Ma première pensée est pour créer une DLL de l'encapsulation de l'essentiel des fonctionnalités nécessaires et ensuite l'appeler à la fois via une interface de Web Forms pour l'exécution manuelle, et une console application qui s'exécute comme un système automatisé (par jour) de la tâche planifiée.
Une autre suggestion a été d'exposer un Service Web pour la fonctionnalité de base de la place, mais que l'application n'aurez plus jamais besoin d'être appelé par une ressource externe, je pense que l'effort supplémentaire requis dans la mise en œuvre d'un Service Web peut-être pas en valeur la dispute. La DLL doit également être beaucoup plus rapide(?).
Ma question est la voie que vous choisissez? Existe-il des avantages/inconvénients que je n'ai pas couvert? Tout omissions flagrantes?
Avertissement: je suis nouveau .Net, mais en raison de l'un de nos développeurs, d'être impliqué dans un grave accident, j'ai été invité à passer à la plaque.
OriginalL'auteur James Marshall | 2008-11-18
Vous devez vous connecter pour publier un commentaire.
Personnellement, je dis aller avec la DLL. Il sera simple et rapide.
Avec un service web, vous aurez besoin de penser à votre réseau, pare-feu, de la performance, etc. Elle rend aussi plus difficile à déboguer puisque vous ne serez pas en mesure d'étape dans le service web de vos clients, vous devez définir des points d'arrêt sur les deux côtés des appels.
L'autre problème avec les services web pour vous est que vous devez être beaucoup plus robuste de la manipulation des échecs. Avec une DLL, vous le savez, un appel à une méthode va réussir, mais avec un service web, vous aurez besoin d'être préparé pour cela appel à l'échec ou le temps chaque fois que vous effectuez un appel au-delà.
Enfin, si vous trouvez un besoin pour un service web à une date ultérieure, vous devriez être en mesure assez facilement convertir le fichier DLL dans un service web avec un minimum d'entretien.
OriginalL'auteur Rob Prouse
Actuellement, il n'est pas besoin de créer un webservice. Vous avez juste à tenir un autre service IIS sur votre serveur. Si plus tard vous sur créer une interface qui auront besoin de cette DLL vous pouvez tout simplement se référer à elle. Donc, il n'y a pas besoin de le faire préventive.
OriginalL'auteur MrFox
Vous avez raison, les services web sont beaucoup de tracas à partir de l'expérience et beaucoup plus lent.
Je suggère une PONO (plain old .net de l'objet), mais utiliser des interfaces. Regardez dans Spring.NET cadre - il peut exporter l'objet, comme pour vous, quel que soit le type de (web) service, vous n'avez pas besoin de faire la plumming.
Sur le côté client, vous pouvez également utiliser le printemps pour faire de l'injection de dépendance et de décider si vous souhaitez en processus de DLL ou d'un service web de mise en œuvre, simplement en changeant la valeur dans le fichier de configuration.
Aussi le Printemps a Quartz planificateur de l'intégration, vous voudrez peut-être chercher trop.
OriginalL'auteur badbadboy
L'aide de la DLL est une bonne façon, il est plus rapide et offrir de la liberté dans le futur de créer un webservice avec l'aide de ces dll(si nécessaire) avec plus de sécurité, plus de webservice.
OriginalL'auteur Nakul Chaudhary
Personnellement, je ferais ce que vous avez dit; mettre ma logique dans la DLL. Ensuite, utilisez DLL à partir de votre application, webservice, et ce que jamais encore être déterminée d'une interface qu'ils demande dans le futur.
OriginalL'auteur John MacIntyre
Nous avons vraiment besoin de plus d'informations. Il est difficile de répondre avec out savoir qu'est-ce exactement à vos exigences. L'approche en couches(dll/catégorie distincte) est simple et rapide. Une approche à plusieurs niveaux(web service) vous permettra d'avoir un environnement et vous donne encore plus d'abstraction. Vous pouvez modifier le code derrière le web service avec la modification de vos clients.
Mais Dans le but d'évaluer ce que nous devons savoir ce que votre projet est-ce que cette dll ne pourra le faire. Sinon vous êtes juste de l'audience peuples préférences.
OriginalL'auteur Aaron Fischer
De l'encapsulation de votre logique dans une Assemblée suffirait pour votre solution, car il semble qu'il ne va rien laisser dans les limites de votre domaine, à la fois vos applications internes seront à l'aide de fonctionnalités exposées par la composante de la conception.
Dans l'intérêt de la facilité de maintenance, vous pouvez charger cette Assemblée à partir d'une URL assez facilement, et en bas de la ligne, si ce composant doit être enveloppé dans un Service Web, c'est certainement possible, et votre code peut ensuite créer des proxy web classes avec un minimum de modifications de code.
OriginalL'auteur kd7
je développe une application similaire. l'approche ive pris est d'avoir mon extraction de la logique dans la dll. ce est exposée via un webservice. - je trouver des services web est plus simple car je n'ai pas besoin de deleop interfaces ou exposer mes objets ( j'utilise des classes pour encapsuler les données ) sur le client. j'ai ensuite développeurs web et les winforms aux développeurs d'écrire leur propre couche de présentation. bien qu'il existe des avantages et des inconvénients( wont go) de services web sont plus simples que j'ai une seule couche. utiliser l'accès distant, j'ai besoin de l'interface supplémentaire ou côté client bibliothèque whihc doit être installé sur chaque client. de cette façon, j'arrive juste du côté serveur, alors que les différentes Interfaces sont indépendantes. j'aime juste minable couplé de codage.
nous avons d'exécuter de nombreuses fenêtres de services également utiliser les webservices. la nôtre est une carte de crédit org et nous coopérons avec de nombreux systèmes. services web donner le maximum de flexibilité.
après tout, il se résume à votre propre préférence personnelle, en tenant compte de vos exigences. j'avais dirais, ne pas choisir de 1 sur l'autre, sans tenir compte de la capacité de faire des changements avec un minimum d'effort. j'ai trouvé rad applications pour changer rapidement avec de nouvelles exigences continuellement ajoutées. prenez votre temps, condier la portée et la durée de vie de votre projet et les besoins. puis de développer vos points forts.
OriginalL'auteur
Wow wow wow. Ils partagent tous une DB? Si c'est le cas, non, non, et non. Si le DB n'est PAS partagé, c'est vraiment DLL.
Le bon choix est de Service Web. La raison en est très simple aussi.
1) la Cohérence du modèle du domaine et de la logique métier. Disons que vous stockez un enum dans une colonne, et vous ajoutez un enum et de déployer une application. Il va maintenant briser les deux autres applications.
2) la Facilité de déploiement. Un changement = un déploiement. Si c'est une dll, un changement = 3 déployer.
3) DB transactions et le contrôle d'accès concurrentiel. Beaucoup plus facile de le résoudre dans un domaine de l'application.
Que par Contre suggéré par d'autres, je les trouve trop partielle.
1) Difficulté de débogage à travers le domaine de l'application. Vous devriez publier les exceptions possibles à travers WSDL comme la faute des exceptions. Le client appelant doit gérer ces la faute des exceptions de manière appropriée. Il est aussi incroyablement facile à mettre en place des tests unitaires et se moque à la fois d'appeler le client et le serveur. Point d'arrêt n'est pas la bonne façon de déboguer et de travailler avec des applications distribuées. Vous pouvez, et il n'est pas difficile. Je ne crois pas que c'est la bonne approche.
2) la Performance. WCF permet de définir les différentes reliures par la configuration. De http de base (qui est plus facile à déboguer) tout le chemin vers le bas de canal nommé que vous pouvez utiliser pour obtenir près d'appel des indigènes de la performance. Cette décision peut (presque. Il y a quelques bizarreries avec de liaison différent que vous devez prendre en considération.) être décidé après le développement.
3) de Sécurité. En disant WCF ne gère pas la sécurité est vraiment mauvais.
Enfin, de vrais cons de moi:
1) Plus complexe. D'accord. Contexte différent qui rend la conception de l'application plus difficile. Que va deux façons tho. Cette complexité impose une séparation claire entre les niveaux. Présentation du contexte devrait rester là où ils sont, au niveau de la présentation.
2) ont Besoin de plus de planification. La conception de contrats pour les Services Web WCF est un art en soi.
3) les frais généraux de Gestion de configuration. Peut être intimidant pour les nouveaux développeurs, mais j'espère que vous pouvez obtenir au-dessus de cet obstacle rapidement. Configuration WCF est une épée à double tranchant, puissant, mais complexe (pour certains).
Mon expérience personnelle est, à tout moment de la base de données est partagée, et la DLL est utilisée dans plusieurs domaines d'application, je regrette que je n'ai pas de marteau de l'équipe de dev assez pour aller avec les Services Web de l'itinéraire.
Alors, quelle est votre décision finale? Cela fait maintenant quatre ans.
Ouais - c'est un peu un nécro. Au moment de la WCF n'était pas un problème. DLL est le moyen que nous sommes allés et l'application a été heureux dans la production depuis 4 ans!
OriginalL'auteur Sleeper Smith
Je ne peux pas croire que la réponse acceptée a été celui qui a conseillé d'utiliser une DLL...
"nous ne voyons aucun changement pour quelque temps."
C'est pourquoi nous avons alors de passer du temps à corriger les problèmes créés par les devs prise de ces décisions. Ne pensez pas seulement au sujet d'aujourd'hui, penser à demain. Base de données des trucs qui devrait être caché client, si vous avez d'ajouter un nouveau client, et demain un nouveau?? Construire des contrats et l'utilisation des services, web ou non.
OriginalL'auteur MeTitus