ASP.NET 5 agrega referencia de servicio WCF

En Visual Studio 2015 Preview (Pre Release), ¿cómo puedo agregar una referencia de servicio para un servicio WCF ?

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, supondré 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 channelFactory = new ChannelFactory(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 architecture 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.

http://blogs.msdn.com/b/webdev/archive/2015/12/15/wcf-connected-service-visual-studio-extension-preview-for-asp-net-5-projects.aspx

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.

  1. Crear servicio WCF.
  2. Crear una biblioteca de clases normal (elijo .NET Framework 4.6)
  3. Después de eso, agregué la referencia del servicio WCF a ClassLibrary.
  4. 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-*" } } }, 
  5. Ahora, si mira el proyecto classlibrary, contiene el archivo app.config.
  6. Copie ese archivo y colóquelo en la carpeta wwwroot del proyecto del sitio web ASP.net (vnext)
  7. cambiarle el nombre a web.config.

Ahora ejecuta tu aplicación.

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 :

  1. se agregó una referencia de servicio a otro proyecto (biblioteca de clases o aplicación univ de Windows 8.1 según lo recomendado)
  2. copiado la clase de referencia al proyecto ASP.NET 5
  3. copiado el todo

    ...

    de app.config a web.config

  4. 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": { } } 

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