c# - net - visual studio wcf connected service
ASP.NET 5 agrega referencia de servicio WCF (5)
En Visual Studio 2015 Preview (Pre Release), ¿cómo puedo agregar una referencia de servicio para un servicio WCF
?
Actualmente no hay herramientas disponibles para esto y una posible razón para este System.ServiceModel que no está disponible en asp.netcore5.
Si decidió utilizar ASP.net 5, puede hacer lo siguiente a partir de ahora para usar el servicio WCF (estoy usando Visual Studio 2015 CTP 5 para esta respuesta)
En VS 2015 CTP 5, nos permite agregar referencias de la biblioteca de clases regulares.
- Crear servicio WCF.
- Crear una biblioteca de clases normal (elijo .NET Framework 4.6)
- Después de eso, agregué la referencia del servicio WCF a ClassLibrary.
Agregue ClassLibrary como referencia al sitio web ASP.net 5. (Como el framework CoreCLR no es compatible con System.Service Model, lo eliminé de project.json) Framework from project.json.
"frameworks": { "aspnet50": { "frameworkAssemblies": { "System.ServiceModel": "" }, "dependencies": { "ClassLibrary2": "1.0.0-*" } } },
- Ahora, si mira el proyecto classlibrary, contiene el archivo app.config.
- Copie ese archivo y colóquelo en la carpeta wwwroot del proyecto del sitio web ASP.net (vnext)
- cambiarle el nombre a web.config.
Ahora ejecuta tu aplicación.
En la actualidad, este es un proceso bastante complicado ya que las herramientas no parecen apoyar mucho en la forma de generar código de cliente WCF o mapear automáticamente desde archivos de configuración. Además, como ha señalado dotnetstep, el equipo de ASP.NET aún no ha portado System.ServiceModel
a 5 (o ha proporcionado una alternativa para los clientes de WCF). No obstante, podemos usar un enfoque basado en código para crear un proxy de cliente y usar svcutil
para generar nuestras clases de referencia de servicio.
Prerrequisitos de la solución
Para este ejemplo, http://localhost:5000/MapService.svc que aloja localmente un servicio en http://localhost:5000/MapService.svc que implementa un contrato de IMapService
. Además, llamaremos al proyecto que contendrá el servicio proxy MapClient
.
Su project.json
debería verse algo así como:
{
"commands": {
"run": "run"
},
"frameworks": {
"dnx451": {
"dependencies": {
"Microsoft.AspNet.Mvc": "6.0.0-beta2"
},
"frameworkAssemblies": {
"System.ServiceModel": "4.0.0.0"
}
}
}
}
Generar las clases de referencia de servicio
Primero, MapClient
una carpeta, Service References
, en el proyecto MapClient
.
A continuación, abra el indicador de comandos del desarrollador para VS2015 y navegue a su directorio de proyecto MapClient
:
cd "C:/Users/youraccount/Documents/Visual Studio 2015/Projects/MapClient/src/MapClient"
Asegúrese de que MapService
esté ejecutando y ejecute el siguiente comando:
svcutil /language:cs /out:"Service References/MapServiceReference.cs" http://localhost:5000/MapService.svc
Eso debería generar dos archivos, output.config
y MapServiceReference.cs
.
Crear un proxy de cliente basado en código
Dado que no hay forma de mapear automáticamente la configuración de punto final y enlace desde un archivo de configuración a su ClientBase
actualmente en ASP.NET 5, output.config
no output.config
sirve de mucho. Puedes eliminarlo
En cambio, creemos un proxy de cliente en el código:
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();
}
}
}
Ahora puede usar la instancia clientProxy
para acceder a cualquier Contrato de operación en IMapService
.
Como nota al margen, probablemente sería mejor arquitectura para crear un archivo de configuración clave: valor que almacena su configuración de enlace y punto final y utilizar el objeto Microsoft.Framework.ConfigurationModel.Configuration
para llenar su ChannelFactory
para que pueda mantener su configuración de servicio fuera de su código, pero con suerte este ejemplo lo ayudará a comenzar.
Hay una nueva extensión de Visual Studio que le permite agregar y usar referencias de servicio como en versiones anteriores. También es compatible con el nuevo CoreCLR, lo acabo de probar.
Otra forma potencial de hacer esto que me ha funcionado es simplemente agregar un proyecto dll a la solución y agregar el servicio aquí como lo haría normalmente: incluir el dll en el proyecto MVC y ref de los servicios.
Solo necesita copiar el contenido de app.config en la propia aplicación de los proyectos mvc .config - yes, app.config, not web.config.
Hecho
Editar : La nueva extensión para agregar un servicio conectado como se publicó en otras respuestas todavía no me funcionaba, pero encontré otra configuración funcional, aunque requiere que no use dnxcore50 :
- Tener una biblioteca de clase que contenga la referencia de servicio (elija un marco <= aspnet5 usado, p. Ej. Dnx451)
- Haga referencia a esa en su aspnet5 haciendo clic derecho en las referencias (creará todo el material de envoltura)
Tener el modelo de servicio y la dll de serialización necesaria en la sección "framework" de project.json (dnxcore debe ser eliminado)
"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" } }
Debería poder hacer donde lo necesite:
using YourNameSpace.ServiceReference
Vieja respuesta :
esto funcionó para mí:
Seguí ambas instrucciones al mismo tiempo, proporcionadas bajo los problemas conocidos para beta4 (encontrar en la página "WCF") en este enlace:
https://github.com/aspnet/Home/releases
entonces mis pasos fueron :
- se agregó una referencia de servicio a otro proyecto (biblioteca de clases o aplicación univ de Windows 8.1 según lo recomendado)
- copiado la clase de referencia al proyecto ASP.NET 5
copiado el todo
<system.serviceModel>...
de app.config a web.config
copiamos todas las listas de dependencias faltantes del enlace de arriba en project.json , bajo dependencias comunes, dejando solos los frameworks específicos ( tratando de hacer referencia a la librería de clases dotnet4.6 como una dependencia de aspnet framework daba muchos tipos faltantes en ese framework )
"dependencies": { >> here << }
"frameworks": {
"dnx451": { },
"dnxcore50": { }
}