Dans Visual Studio 2015 Preview (version préliminaire), comment puis-je ajouter une référence de service pour un service WCF
?
Actuellement, il s'agit d'un processus assez complexe car l'outillage ne semble pas prendre en charge beaucoup la manière de générer le code client WCF ou de mapper automatiquement à partir des fichiers de configuration. En outre, comme l'a souligné dotnetstep, l'équipe ASP.NET n'a pas porté System.ServiceModel
à 5 pour le moment (ou fourni une alternative pour les clients WCF encore ). Néanmoins, nous pouvons utiliser une approche basée sur le code pour créer un proxy client et utiliser svcutil
pour générer nos classes de référence de service.
Pour cet exemple, je suppose que vous hébergez localement un service à http: // localhost: 5000/MapService.svc qui implémente un contrat IMapService
. De plus, nous appellerons le projet qui va contenir le proxy de service MapClient
.
Votre project.json
devrait ressembler à:
{
"commands": {
"run": "run"
},
"frameworks": {
"dnx451": {
"dependencies": {
"Microsoft.AspNet.Mvc": "6.0.0-beta2"
},
"frameworkAssemblies": {
"System.ServiceModel": "4.0.0.0"
}
}
}
}
Commençons par créer un dossier, Service References
, dans le projet MapClient
.
Ensuite, ouvrez l'invite de commande du développeur pour VS2015 et accédez à votre répertoire de projet MapClient
:
cd "C:\Users\youraccount\Documents\Visual Studio 2015\Projects\MapClient\src\MapClient"
Assurez-vous que MapService
est en cours d'exécution et exécutez la commande suivante:
svcutil /language:cs /out:"Service References\MapServiceReference.cs" http://localhost:5000/MapService.svc
Cela devrait générer deux fichiers, output.config
et MapServiceReference.cs
.
Puisqu'il n'y a aucun moyen de mapper automatiquement le point de terminaison et la configuration de liaison d'un fichier de configuration à votre ClientBase
actuellement dans ASP.NET 5, le output.config
ne nous est pas très utile. Vous pouvez le supprimer.
Au lieu de cela, créons un proxy client dans le code:
using System.ServiceModel;
namespace TestWCFReference
{
public class Program
{
public void Main(string[] args)
{
var endpointUrl = "http://localhost:5000/MapService.svc";
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress endpoint = new EndpointAddress(endpointUrl);
ChannelFactory<IMapService> channelFactory = new ChannelFactory<IMapService>(binding, endpoint);
IMapService clientProxy = channelFactory.CreateChannel();
var map = clientProxy.GetMap();
channelFactory.Close();
}
}
}
Vous pouvez maintenant utiliser l'instance clientProxy
pour accéder à n'importe quel contrat d'opération dans IMapService
.
En tant que sidenote, il serait probablement préférable de créer un fichier de configuration key: value qui stocke votre configuration de liaison et de point de terminaison et utilise le Microsoft.Framework.ConfigurationModel.Configuration
objet pour remplir votre ChannelFactory
afin que vous puissiez garder votre configuration de service hors de votre code, mais j'espère que cet exemple vous aidera à démarrer.
Il existe une nouvelle extension Visual Studio qui vous permet d'ajouter et d'utiliser des références de service comme dans les versions précédentes. Il est également compatible avec le nouveau CoreCLR, je viens de le tester.
Edit: La nouvelle extension pour ajouter un service connecté comme posté dans d'autres réponses ne fonctionnait toujours pas pour moi, mais j'ai trouvé une autre configuration de travail, bien qu'elle nécessite vous n'utilisez pas dnxcore50:
Avoir le modèle de service et la DLL de sérialisation nécessaire dans la section "framework" de project.json (le dnxcore doit être supprimé)
"dnx451": {
"dependencies": {
"YourClassLibWillAppearHere": "1.0.0-*" // after you reference it
},
"frameworkAssemblies": {
"System.ServiceModel": "4.0.0.0",
"System.ServiceModel.Http": "4.0.0.0",
"System.Runtime.Serialization": "4.0.0.0"
}
}
Vous devriez pouvoir faire où vous en avez besoin:
using YourNameSpace.ServiceReference
Ancienne réponse:
cela a fonctionné pour moi:
J'ai suivi les deux instructions en même temps fournies sous problèmes connus pour beta4 (trouver dans la page "WCF") sur ce lien:
https://github.com/aspnet/Home/releases
donc mes pas où:
copié le tout
<system.serviceModel>...
de app.config à web.config
copié toutes ces listes de dépendances manquantes à partir du lien ci-dessus dans project.json , sous les dépendances communes, en laissant seules les frameworks spécifiques ( essayant de référencer la bibliothèque de classes dotnet4.6 comme une dépendance du framework aspnet a donné de nombreux types manquants dans ce framework)
"dependencies": { >> here << }
"frameworks": {
"dnx451": { },
"dnxcore50": { }
}
Une autre façon possible de le faire qui a fonctionné pour moi est d'ajouter simplement un projet dll à la solution et d'ajouter la référence de service ici comme vous le feriez normalement - incluez la dll dans le projet MVC et la référence pour les services.
Il vous suffit de copier le contenu de app.config dans le propre projet mvc app.config - oui, app.config, pas web.config.
Terminé
Actuellement, aucun outil n'est disponible pour cela et une raison possible pour ce System.ServiceModel qui n'est pas disponible dans asp.netcore5.
Si vous avez décidé d'utiliser ASP.net 5, vous pouvez faire la chose suivante pour utiliser le service WCF (j'utilise Visual Studio 2015 CTP 5 pour cette réponse)
Dans VS 2015 CTP 5, il nous permet d'ajouter une référence de bibliothèque de classe régulière.
Ajoutez ClassLibrary comme référence au site Web ASP.net 5. (Étant donné que le framework CoreCLR ne prend pas en charge le modèle System.Service, j'ai supprimé celui-ci de project.json). Une partie du framework de project.json.
"frameworks": {
"aspnet50": {
"frameworkAssemblies": {
"System.ServiceModel": ""
},
"dependencies": {
"ClassLibrary2": "1.0.0-*"
}
}
},
Exécutez maintenant votre application.