Tutorial WCF

December 10, 2017 | Author: Adrian Rodriguez Guerrero | Category: Proxy Server, .Net Framework, Point And Click, Computer Program, C Sharp (Programming Language)
Share Embed Donate


Short Description

Descripción: wcf msdn...

Description

Definición de un contrato de servicio de Windows Communication Foundation Es la primera de las seis tareas necesarias para crear una aplicación básica de Windows Communication Foundation (WCF). Para obtener información general de las seis tareas, vea el tema Tutorial de introducción. Al crear un servicio de WCF, la primera tarea es definir un contrato de servicio. El contrato de servicio especifica qué operaciones admite el servicio. Una operación se puede considerar un método de servicio Web. Los contratos se crean mediante la definición de una interfaz de C++, C# o Visual Basic (VB). Cada método de la interfaz se corresponde con una operación de servicio concreta. Cada interfaz debe tener ServiceContractAttribute aplicado y cada operación debe tener el atributo OperationContractAttribute aplicado. Si un método de una interfaz que tiene el atributo ServiceContractAttribute no tiene el atributo OperationContractAttribute, el servicio no expone ese método. El código usado para esta tarea se proporciona en el ejemplo que sigue al procedimiento.

Para definir un contrato de servicio 1.

Abra Visual Studio 2012 como administrador haciendo clic con el botón secundario en el programa en el menú Inicio y seleccionando Ejecutar como administrador. 2. Para crear un proyecto de biblioteca de servicio WCF, haga clic en el menú Archivo y seleccione Nuevo y Proyecto. En el lado izquierdo del cuadro de diálogo Nuevo proyecto, expanda Visual C# para un proyecto de C# u Otros lenguajes y después Visual Basicpara un proyecto de Visual Basic. Bajo el lenguaje seleccionado, seleccione WCF y aparecerá una lista de plantillas de proyecto en la sección central del cuadro de diálogo. Seleccione Biblioteca de servicios WCF y escriba GettingStartedLib en el cuadro de textoNombre y GettingStarted en el cuadro de texto Nombre de la solución en la parte inferior del cuadro de diálogo. 3. Visual Studio creará el proyecto que contiene 3 archivos: IService1.cs (o IService1.vb), Service1.cs (o Service1.vb) y App.config. El archivo IService1 contiene un contrato de servicio predeterminado. El archivo Service1 contiene una implementación predeterminada del contrato de servicio. El archivo App.config contiene la configuración necesaria para cargar el servicio predeterminado con el host de servicio WCF de Visual Studio. Para obtener más información acerca de la herramienta Host de servicio de WCF, vea Host de servicio WCF (WcfSvcHost.exe). 4. Abra el archivo IService1.cs o IService1.vb y elimine el código dentro de la declaración de espacio de nombres que sale de la declaración de espacio de nombres. Dentro de la declaración de espacio de nombres se define una nueva interfaz denominada ICalculatorcomo se muestra en el código siguiente. 5. // IService.cs 6. using System; 7. using System.Collections.Generic; 8. using System.Linq; 9. using System.Runtime.Serialization; 10. using System.ServiceModel; 11. using System.Text; 12.

13. namespace GettingStartedLib 14. { 15. [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] 16. public interface ICalculator 17. { 18. [OperationContract] 19. double Add(double n1, double n2); 20. [OperationContract] 21. double Subtract(double n1, double n2); 22. [OperationContract] 23. double Multiply(double n1, double n2); 24. [OperationContract] 25. double Divide(double n1, double n2); 26. } 27. } 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.

‘IService.vb Imports System Imports System.ServiceModel Namespace GettingStartedLib _ Public Interface ICalculator _ Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double _ Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double _ Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double _ Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double End Interface End Namespace

Este contrato define una calculadora en línea. Observe que la interfaz ICalculator se marca con el atributo ServiceContractAttribute.Este atributo define un espacio de nombres que se usa para eliminar la ambigüedad del nombre del contrato.Cada operación de calculadora se marca con el atributo OperationContractAttribute.

Cómo implementar un contrato de servicio de Windows Communication Foundation Ésta es la segunda de las seis tareas que son necesarias para crear un servicio Windows Communication Foundation (WCF) básico y un cliente que llame al servicio. Para obtener una introducción a las seis tareas, consulte el tema Tutorial de introducción. El siguiente paso para crear una aplicación de WCF es implementar la interfaz de servicio. Esto implica la creación de una clase denominada CalculatorService que implemente la interfaz ICalculator definida por el usuario.

Para implementar un contrato de servicio WCF •

Abra el archivo Service1.cs o Service1.vb y agregue el código siguiente: C# //Service1.cs using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace GettingStartedLib { public class CalculatorService : ICalculator { public double Add(double n1, double n2) { double result = n1 + n2; Console.WriteLine("Received Add({0},{1})", n1, n2); // Code added to write output to the console window. Console.WriteLine("Return: {0}", result); return result; } public double Subtract(double n1, double n2) { double result = n1 - n2; Console.WriteLine("Received Subtract({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result;

} public double Multiply(double n1, double n2) { double result = n1 * n2; Console.WriteLine("Received Multiply({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } public double Divide(double n1, double n2) { double result = n1 / n2; Console.WriteLine("Received Divide({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } } } ‘Service1.vb Imports System Imports System.ServiceModel Namespace GettingStartedLib Public Class CalculatorService Implements ICalculator Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add Dim result As Double = n1 + n2 ' Code added to write output to the console window. Console.WriteLine("Received Add({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract Dim result As Double = n1 - n2 Console.WriteLine("Received Subtract({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply

Dim result As Double = n1 * n2 Console.WriteLine("Received Multiply({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide Dim result As Double = n1 / n2 Console.WriteLine("Received Divide({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function End Class End Namespace Cada método implementa la operación de la calculadora y escribe texto en la consola para simplificar las pruebas.

Ejemplo

El siguiente código muestra la interfaz que define el contrato y la implementación de la interfaz. // IService1.cs using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace GettingStartedLib { [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] public interface ICalculator { [OperationContract] double Add(double n1, double n2); [OperationContract] double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2); } } // Service1.cs using System; using System.Collections.Generic;

using using using using

System.Linq; System.Runtime.Serialization; System.ServiceModel; System.Text;

namespace GettingStartedLib { public class CalculatorService : ICalculator { public double Add(double n1, double n2) { double result = n1 + n2; Console.WriteLine("Received Add({0},{1})", n1, n2); // Code added to write output to the console window. Console.WriteLine("Return: {0}", result); return result; } public double Subtract(double n1, double n2) { double result = n1 - n2; Console.WriteLine("Received Subtract({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } public double Multiply(double n1, double n2) { double result = n1 * n2; Console.WriteLine("Received Multiply({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } public double Divide(double n1, double n2) { double result = n1 / n2; Console.WriteLine("Received Divide({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } } } ‘IService.vb Imports System Imports System.ServiceModel Namespace GettingStartedLib

_ Public Interface ICalculator _ Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double _ Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double _ Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double _ Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double End Interface End Namespace Imports System Imports System.ServiceModel

Namespace GettingStartedLib Public Class CalculatorService Implements ICalculator Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add Dim result As Double = n1 + n2 ' Code added to write output to the console window. Console.WriteLine("Received Add({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract Dim result As Double = n1 - n2 Console.WriteLine("Received Subtract({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply Dim result As Double = n1 * n2 Console.WriteLine("Received Multiply({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function

Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide Dim result As Double = n1 / n2 Console.WriteLine("Received Divide({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function End Class End Namespace Ahora, el contrato de servicio se ha creado e implementado.Compile la solución para asegurarse de que no hay ningún error de compilación y, a continuación, continúe en Procedimiento para hospedar y ejecutar un servicio básico de Windows Communication Foundationpara ejecutar el servicio.Para obtener información sobre la solución de problemas, vea Solución de problemas con el tutorial de introducción.

Compilar el código

Si usa Visual Studio, en el menú Compilar, haga clic en Compilar solución (o presione CTRL+MAYÚS+B).

Procedimiento para hospedar y ejecutar un servicio básico de Windows Communication Foundation .NET Framework 4.5 Otras versiones

Es la tercera de las seis tareas necesarias para crear una aplicación de Windows Communication Foundation (WCF). Para obtener información general de las seis tareas, vea el tema Tutorial de introducción. Este tema describe cómo hospedar un servicio de Windows Communication Foundation (WCF) en una aplicación de consola. Este procedimiento consta de los siguientes pasos:

• Cree un proyecto de aplicación de consola para hospedar el servicio. • Crear un host del servicio para el servicio. • Habilitar el intercambio de metadatos. • Abrir el host del servicio. En el ejemplo que se ofrece después del procedimiento, se proporciona una lista completa del código escrito en esta tarea.

Para crear una nueva aplicación de consola para hospedar el servicio 1.

2.

3.

4.

Cree un nuevo proyecto de aplicación de consola haciendo clic con el botón secundario en la solución Introducción, y seleccionando Agregar y Nuevo proyecto. En la parte izquierda del cuadro de diálogo Agregar nuevo proyecto, seleccione Ventanas en C# o VB.En la sección central del cuadro de diálogo, seleccione Aplicación de consola. Asigne al proyecto el nombre GettingStartedHost. Establezca la versión de .NET Framework de destino del proyecto GettingStartedHost en .NET Framework 4.5 haciendo clic con el botón secundario en GettingStartedHost en el Explorador de soluciones y seleccionando Propiedades. En el cuadro desplegable Versión de .NET Framework de destino, seleccione .NET Framework 4.5. Establecer la versión de .NET Framework de destino de un proyecto de VB es algo diferente; en el cuadro de diálogo de propiedades del proyecto GettingStartedHost, haga clic en la pestaña Compilaren el lado izquierdo de la pantalla y haga clic en el botón Opciones de compilación avanzadas en la esquina izquierda inferior del cuadro de diálogo. Seleccione .NET Framework 4.5 en el cuadro desplegable Versión de .NET Framework de destino. Establecer la versión de .NET Framework de destino hará que Visual Studio 2012 recargue la solución; haga clic en Aceptar cuando se le pida. Agregue una referencia al proyecto GettingStartedLib al proyecto GettingStartedHost haciendo clic con el botón secundario en la carpeta Referencias bajo el proyecto GettingStartedHost en el explorador de soluciones y seleccione Agregar referencia. En el lado izquierdo del cuadro de diálogo Agregar referencia , seleccione Solución y seleccione GettingStartedLib en la sección central del cuadro de diálogo y haga clic en Agregar. Esto hace que los tipos definidos en GettingStartedLib estén disponibles para el proyecto GettingStartedHost. Agregue una referencia a System.ServiceModel al proyecto GettingStartedHost haciendo clic con el botón secundario en la carpeta Referencia bajo el proyecto GettingStartedHost en el Explorador de soluciones y seleccione Agregar referencia. En el cuadro de diálogoAgregar referencia, seleccione Framework en el lado izquierdo del cuadro de diálogo. En el cuadro de texto Ensamblados de búsqueda, escriba System.ServiceModel. En la sección central del cuadro de diálogo, seleccione System.ServiceModel, haga clic en el botón Agregar y haga clic en el botón Cerrar. Guarde la solución haciendo clic en el botón Guardar todo debajo del menú principal.

Para hospedar el servicio • • • • • • • • • • • • •

Abra el archivo Program.cs o Module.vb y escriba el código siguiente: // program.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using GettingStartedLib; using System.ServiceModel.Description; namespace GettingStartedHost { class Program

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •

{ static void Main(string[] args) { // Step 1 Create a URI to serve as the base address. Uri baseAddress = new Uri("http://localhost:8000/GettingStarted/"); // Step 2 Create a ServiceHost instance ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress); try { // Step 3 Add a service endpoint. selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService"); // Step 4 Enable metadata exchange. ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; selfHost.Description.Behaviors.Add(smb); // Step 5 Start the service. selfHost.Open(); Console.WriteLine("The service is ready."); Console.WriteLine("Press to terminate service."); Console.WriteLine(); Console.ReadLine(); // Close the ServiceHostBase to shutdown the service. selfHost.Close(); } catch (CommunicationException ce) { Console.WriteLine("An exception occurred: {0}", ce.Message); selfHost.Abort(); } } } } ‘Module1.vb Imports System Imports System.ServiceModel Imports System.ServiceModel.Description Imports GettingStartedLibVB.GettingStartedLib Module Service

• • • •

Class Program Shared Sub Main() ' Step 1 Create a URI to serve as the base address Dim baseAddress As New Uri("http://localhost:8000/ServiceModelSamples/Service")

• • •

' Step 2 Create a ServiceHost instance Dim selfHost As New ServiceHost(GetType(CalculatorService), baseAddress)

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •

Try ' Step 3 Add a service endpoint ' Add a service endpoint selfHost.AddServiceEndpoint( _ GetType(ICalculator), _ New WSHttpBinding(), _ "CalculatorService") ' Step 4 Enable metadata exchange. Dim smb As New ServiceMetadataBehavior() smb.HttpGetEnabled = True selfHost.Description.Behaviors.Add(smb) ' Step 5 Start the service selfHost.Open() Console.WriteLine("The service is ready.") Console.WriteLine("Press to terminate service.") Console.WriteLine() Console.ReadLine() ' Close the ServiceHostBase to shutdown the service. selfHost.Close() Catch ce As CommunicationException Console.WriteLine("An exception occurred: {0}", ce.Message) selfHost.Abort() End Try End Sub End Class End Module 1.

Paso 1 - Crea una instancia de la clase Uri para contener la dirección base del servicio.Los servicios se identifican mediante una dirección URL que contiene una dirección base y un URI opcional.Se da formato a la dirección base como sigue: [transporte]://[nombre de equipo o dominio][:nº de puerto opcional]/[segmento opcional de URI]La dirección base para el servicio de calculadora usa el transporte HTTP, localhost, el puerto 8000 y el segmento de URI “GettingStarted”.

2.

3.

Paso 2 - Crea una instancia de la clase ServicHost para hospedar el servicio.El constructor toma dos parámetros: el tipo de la clase que implementa el contrato de servicio y la dirección base del servicio. Paso 3 - Crea una nueva instancia de ServiceEndpoint.Un extremo de servicio consta de una dirección, un enlace y un contrato de servicio.Por tanto, el constructor ServiceEndpoint toma el tipo de interfaz del contrato de servicio, un enlace y una dirección.El contrato de servicio es ICalculator, que se define e implemente en el tipo de servicio.El enlace usado en este ejemplo es WSHttpBinding, que es un enlace integrado que se emplea para conectarse a extremos que son conformes a las especificaciones de WS-*.Para obtener más información sobre los enlaces de WCF, vea Información general de enlaces de Windows Communication Foundation.La dirección se anexa a la dirección base para identificar el extremo.La dirección especificada en este código es “Calculator”, por lo que la dirección completa del extremo es “http://localhost:8000/GettingStartedService/Calculator”.

Importante

Agregar un extremo de servicio es opcional cuando se usa .NET Framework 4 o posterior.En esta para cada combinación de dirección base y contrato implementada por el servicio.Para obtener m información sobre los extremos, enlaces y comportamientos predeterminados, vea Configuración 4.

5.

Paso 4 - Habilita el intercambio de metadatos.Los clientes usarán intercambio de metadatos para generar los servidores proxy que se usarán para llamar a las operaciones de servicio.Para habilitar el intercambio de metadatos, cree una instancia deServiceMetadataBehavior, establezca su propiedad HttpGetEnabled en true y agregue el comportamiento a la colección Behaviors de la instancia de ServiceHost. Paso 5 - Abre ServiceHost para escuchar los mensajes entrantes.Observe que el código espera que el usuario presione ENTRAR.Si no lo hace, la aplicación se cerrará inmediatamente y el servicio se cerrará. Observe también que se usa un bloque try/catch.Una vez creada la instancia de ServiceHost, el resto del código se coloca en un bloque try/catch.Para obtener más información sobre cómo detectar de forma segura excepciones producidas por ServiceHost, vea Evitar problemas mediante una declaración de instrucción.

Para comprobar si el servicio funciona 1.

2.

Ejecute la aplicación de consola GettingStartedHost desde Visual Studio 2012. Al ejecutarse en Windows Vista y sistemas operativos posteriores, el servicio se debe ejecutar con privilegios de administrador. Dado que Visual Studio se ejecutó con privilegios de administrador, GettingStartedHost también se ejecuta con dichos privilegios. También puede iniciar un nuevo símbolo del sistema con privilegios de administrador y ejecutar service.exe desde allí. Abra Internet Explorer y busque la página de depuración del servicio en http://localhost:8000/GettingStarted/CalculatorService.

Ejemplo

El siguiente ejemplo incluye el contrato de servicio y la implementación de los pasos anteriores del tutorial y hospeda el servicio en una aplicación de consola. Para compilar esto con un compilador de línea de comandos, compile IService1.cs y Service2.cs en una biblioteca de clases haciendo referencia a System.ServiceModel.dll. Y compile Program.cs en una aplicación de consola. // IService1.cs

using using using using using using

System; System.Collections.Generic; System.Linq; System.Runtime.Serialization; System.ServiceModel; System.Text;

namespace GettingStartedLib { [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] public interface ICalculator { [OperationContract] double Add(double n1, double n2); [OperationContract] double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2); } } // Service1.cs using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace GettingStartedLib { public class CalculatorService : ICalculator { public double Add(double n1, double n2) { double result = n1 + n2; Console.WriteLine("Received Add({0},{1})", n1, n2); // Code added to write output to the console window. Console.WriteLine("Return: {0}", result); return result; } public double Subtract(double n1, double n2) { double result = n1 - n2; Console.WriteLine("Received Subtract({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result);

return result; } public double Multiply(double n1, double n2) { double result = n1 * n2; Console.WriteLine("Received Multiply({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } public double Divide(double n1, double n2) { double result = n1 / n2; Console.WriteLine("Received Divide({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } } } //Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using GettingStartedLib; using System.ServiceModel.Description; namespace GettingStartedHost { class Program { static void Main(string[] args) { // Step 1 of the address configuration procedure: Create a URI to serve as the base address. Uri baseAddress = new Uri("http://localhost:8000/ServiceModelSamples/Service"); // Step 2 of the hosting procedure: Create ServiceHost ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress); try { // Step 3 of the hosting procedure: Add a service endpoint.

selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService"); // Step 4 of the hosting procedure: Enable metadata exchange. ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; selfHost.Description.Behaviors.Add(smb); // Step 5 of the hosting procedure: Start (and then stop) the service. selfHost.Open(); Console.WriteLine("The service is ready."); Console.WriteLine("Press to terminate service."); Console.WriteLine(); Console.ReadLine(); // Close the ServiceHostBase to shutdown the service. selfHost.Close(); } catch (CommunicationException ce) { Console.WriteLine("An exception occurred: {0}", ce.Message); selfHost.Abort(); } } } } ‘IService1.vb Imports System Imports System.ServiceModel Namespace GettingStartedLib _ Public Interface ICalculator _ Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double _ Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double _ Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double _ Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double End Interface End Namespace ‘Service1.vb

Imports System Imports System.ServiceModel

Namespace GettingStartedLib Public Class CalculatorService Implements ICalculator Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add Dim result As Double = n1 + n2 ' Code added to write output to the console window. Console.WriteLine("Received Add({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract Dim result As Double = n1 - n2 Console.WriteLine("Received Subtract({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply Dim result As Double = n1 * n2 Console.WriteLine("Received Multiply({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function

Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide Dim result As Double = n1 / n2 Console.WriteLine("Received Divide({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function End Class End Namespace ‘Module1.vb

Imports Imports Imports Imports

System System.ServiceModel System.ServiceModel.Description GettingStartedLibVB.GettingStartedLib

Module Service Class Program Shared Sub Main() ' Step 1 of the address configuration procedure: Create a URI to serve as the base address. Dim baseAddress As New Uri("http://localhost:8000/ServiceModelSamples/Service") ' Step 2 of the hosting procedure: Create ServiceHost Dim selfHost As New ServiceHost(GetType(CalculatorService), baseAddress) Try ' Step 3 of the hosting procedure: Add a service endpoint. ' Add a service endpoint selfHost.AddServiceEndpoint( _ GetType(ICalculator), _ New WSHttpBinding(), _ "CalculatorService") ' Step 4 of the hosting procedure: Enable metadata exchange. ' Enable metadata exchange Dim smb As New ServiceMetadataBehavior() smb.HttpGetEnabled = True selfHost.Description.Behaviors.Add(smb) ' Step 5 of the hosting procedure: Start (and then stop) the service. selfHost.Open() Console.WriteLine("The service is ready.") Console.WriteLine("Press to terminate service.") Console.WriteLine() Console.ReadLine() ' Close the ServiceHostBase to shutdown the service. selfHost.Close() Catch ce As CommunicationException Console.WriteLine("An exception occurred: {0}", ce.Message) selfHost.Abort() End Try End Sub End Class

End Module

Nota

Servicios como este requieren permiso para registrar las direcciones HTTP en el equipo para la realización de es tener concedido permiso para los espacios de nombres HTTP.Para obtener más información sobre cómo configu the service.exe se debe ejecutar con privilegios de administrador. Ahora, el servicio se está ejecutando.Continúe en Creación de un cliente de Windows Communication Foundation.Para obtener más información, vea Solución de problemas con el tutorial de introducción.

Creación de un cliente de Windows Communication Foundation .NET Framework 4.5 Otras versiones

Es la cuarta de las seis tareas necesarias para crear una aplicación de Windows Communication Foundation (WCF). Para obtener información general de las seis tareas, vea el tema Tutorial de introducción. En este tema se describe cómo se pueden recuperar metadatos desde un servicio WCF y usarlos para crear un proxy WCF que pueda obtener acceso al servicio. Esta tarea se completa usando la funcionalidad Agregar referencia de servicio proporcionada por Visual Studio. Esta herramienta obtiene los metadatos del extremo MEX del servicio y genera un archivo de código fuente administrado para un proxy de cliente en el lenguaje elegido (C# de forma predeterminada). Además de crear el proxy de cliente, la herramienta también crea o actualiza el archivo de configuración para el cliente que permite que la aplicación cliente se conecte al servicio en uno de sus extremos.

Nota

También puede usar la herramienta Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) para ge Studio.

Precaución

Cuando se llama a un servicio de WCF desde un proyecto de biblioteca de clases de Visual Studio 2012 puede u configuración asociado. El archivo de configuración no lo usará el proyecto de biblioteca de clases. Necesitará a la biblioteca de clases. La aplicación cliente usa la clase de proxy generada para comunicarse con el servicio. Este procedimiento se describe en Cómo usar un cliente de Windows Communication Foundation.

Creación de un cliente de Windows Communication Foundation 1.

2.

3.

4.

Cree un nuevo proyecto de aplicación de consola haciendo clic con el botón secundario en la solución Introducción, y seleccionando Agregar y Nuevo proyecto. En la parte izquierda del cuadro de diálogo Agregar nuevo proyecto, seleccione Ventanas en C# o VB.En la sección central del cuadro de diálogo, seleccione Aplicación de consola. Asigne al proyecto el nombre GettingStartedClient. Establezca la versión de .NET Framework de destino del proyecto GettingStartedClient en .NET Framework 4.5 haciendo clic con el botón secundario en GettingStartedClient en el Explorador de soluciones y seleccionando Propiedades. En el cuadro desplegableVersión de .NET Framework de destino, seleccione .NET Framework 4.5. Establecer la versión de .NET Framework de destino de un proyecto de VB es algo diferente; en el cuadro de diálogo de propiedades del proyecto GettingStartedClient, haga clic en la pestañaCompilar en el lado izquierdo de la pantalla y haga clic en el botón Opciones de compilación avanzadas en la esquina izquierda inferior del cuadro de diálogo. Seleccione .NET Framework 4.5 en el cuadro desplegable Versión de .NET Framework de destino. Establecer la versión de .NET Framework de destino hará que Visual Studio 2011 recargue la solución; haga clic en Aceptar cuando se le pida. Agregue una referencia a System.ServiceModel al proyecto GettingStartedClient haciendo clic con el botón secundario en la carpeta Referencia bajo el proyecto GettingStartedClient en el Explorador de soluciones y seleccione Agregar referencia. En el cuadro de diálogo Agregar referencia, seleccione Framework en el lado izquierdo del cuadro de diálogo. En el cuadro de texto Ensamblados de búsqueda, escriba System.ServiceModel. En la sección central del cuadro de diálogo, seleccione System.ServiceModel, haga clic en el botón Agregar y haga clic en el botón Cerrar. Guarde la solución haciendo clic en el botón Guardar todo debajo del menú principal. Después agregará una referencia de servicio al servicio de Calculadora. Antes de poder hacerlo, debe iniciar la aplicación de consola GettingStartedHost. Una vez que el host está en funcionamiento, puede hacer clic con el botón secundario en la carpeta Referencias bajo el proyecto GettingStartedClient en el Explorador de soluciones y seleccionar Agregar referencia de servicio y escribir la dirección URL siguiente en el cuadro Dirección del cuadro de diálogo Agregar referencia de servicio: http://localhost:8000/ServiceModelSamples/Service y haga clic en el botón Ir. CalculatorService se deberá mostrar en el cuadro de lista Servicios; haga doble clic en CalculatorService y se expandirá y mostrará los contratos de servicio implementados por el servicio. Deje el espacio de nombres predeterminado como está y haga clic en el botón Aceptar. Cuando se agrega una referencia a un servicio usando Visual Studio, aparecerá un nuevo elemento en el Explorador de soluciones bajo la carpeta Referencias de servicio bajo el proyecto GettingStartedClient. Si usa la herramienta Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe), se generará un archivo de código fuente y un archivo app.config. También puede usar la herramienta de línea de comandos Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe) con los modificadores adecuados para crear el código de cliente. El siguiente

ejemplo genera un archivo de código y un archivo de configuración para el servicio. El primer ejemplo muestra cómo generar el proxy en VB y el segundo muestra cómo generar el proxy en C#: svcutil.exe /language:vb /out:generatedProxy.vb /config:app.config http://localhost:8000/ServiceModelSamples/service

C# svcutil.exe /language:cs /out:generatedProxy.cs /config:app.config http://localhost:8000/ServiceModelSamples/service Ahora ha creado el proxy que la aplicación cliente usará para llamar al servicio de calculadora. Continúe con el siguiente tema de la serie: Configuración de un cliente básico de Windows Communication Foundation

Configuración de un cliente básico de Windows Communication Foundation .NET Framework 4.5 Otras versiones

Es la quinta de las seis tareas necesarias para crear una aplicación básica de Windows Communication Foundation (WCF). Para obtener información general de las seis tareas, vea el tema Tutorial de introducción. Este tema explica el archivo de configuración del cliente generado mediante la funcionalidad de Agregar referencia de servicio de Visual Studio 2012 o la Herramienta de utilidad de metadatos de ServiceModel (Svcutil.exe). La configuración del cliente consiste en especificar el extremo que usa el cliente para obtener acceso al servicio. Un extremo tiene una dirección, un enlace y un contrato y cada uno de estos elementos debe especificarse en el proceso de configuración del cliente.

Configuración de un cliente de Windows Communication Foundation 1.

Abra el archivo de configuración generado (App.config) del proyecto GettingStartedClient. El siguiente ejemplo es una vista del archivo de configuración generado. Bajo la sección , busque el elemento . 2. 3. 4.

5. 6.

7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 41. 42. 43.

44. 45. 46. 47. Este ejemplo configura el extremo que el cliente usa para tener acceso al servicio que se ubica en la siguiente dirección: http://localhost:8000/ServiceModelSamples/Service/CalculatorService El elemento de extremo especifica que el contrato de servicio de ServiceReference1.ICalculator se usa para la comunicación entre el cliente y el servicio de WCF.El canal de WCF se configura con el WsHttpBinding proporcionado por el sistema.Este contrato se generó mediante Agregar referencia de servicio en Visual Studio.Es básicamente una copia del contrato que se definió en el proyecto GettingStartedLib.El enlace WsHttpBinding especifica HTTP como transporte, seguridad interoperable y otros detalles de configuración. 48. Para obtener más información sobre uso del cliente generado con esta configuración, vea Cómo usar un cliente de Windows Communication Foundation.

Cómo usar un cliente de Windows Communication Foundation .NET Framework 4.5 Otras versiones

Es la última de las seis tareas necesarias para crear una aplicación básica de Windows Communication Foundation (WCF). Para obtener información general de las seis tareas, vea el tema Tutorial de introducción. Una vez creado y configurado un proxy de Windows Communication Foundation (WCF), se puede crear una instancia de cliente y la aplicación de cliente se puede compilar y utilizar para comunicar con el servicio WCF. En este tema se describen los procedimientos para crear instancias y usar un cliente de WCF. Este procedimiento hace tres cosas: 1. Crea una instancia de un cliente de WCF. 2. Llama a las operaciones de servicio desde el proxy generado. 3. Cierra el cliente una vez completada la llamada de operación.

Uso de un cliente de Windows Communication Foundation • • • • • • • • •

Abra el archivo Program.cs o Program.vb del proyecto GettingStartedClient y reemplace el código existente por el código siguiente: using System; using System.Collections.Generic; using System.Linq; using System.Text; using GettingStartedClient.ServiceReference1; namespace GettingStartedClient {

• • • • • • • • • • • • • • • • • • •

class Program { static void Main(string[] args) { //Step 1: Create an instance of the WCF proxy. CalculatorClient client = new CalculatorClient(); // Step 2: Call the service operations. // Call the Add service operation. double value1 = 100.00D; double value2 = 15.99D; double result = client.Add(value1, value2); Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result); // Call the Subtract service operation. value1 = 145.00D; value2 = 76.54D; result = client.Subtract(value1, value2); Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

• • • • • •

// Call the Multiply service operation. value1 = 9.00D; value2 = 81.25D; result = client.Multiply(value1, value2); Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

• • • • • •

// Call the Divide service operation. value1 = 22.00D; value2 = 7.00D; result = client.Divide(value1, value2); Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

• • • • • • • • • • • • •

//Step 3: Closing the client gracefully closes the connection and cleans up resources. client.Close(); } } }

Imports Imports Imports Imports Imports

System System.Collections.Generic System.Text System.ServiceModel GettingStartedClientVB2.ServiceReference1

• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •

Module Module1 Sub Main() ' Step 1: Create an instance of the WCF proxy Dim Client As New CalculatorClient() 'Step 2: Call the service operations. 'Call the Add service operation. Dim value1 As Double = 100D Dim value2 As Double = 15.99D Dim result As Double = Client.Add(value1, value2) Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result) 'Call the Subtract service operation. value1 = 145D value2 = 76.54D result = Client.Subtract(value1, value2) Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result) 'Call the Multiply service operation. value1 = 9D value2 = 81.25D result = Client.Multiply(value1, value2) Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result) 'Call the Divide service operation. value1 = 22D value2 = 7D result = Client.Divide(value1, value2) Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result) ' Step 3: Closing the client gracefully closes the connection and cleans up resources. Client.Close() Console.WriteLine() Console.WriteLine("Press to terminate client.") Console.ReadLine() End Sub End Module

Observe la instrucción using o imports que importa GettingStartedClient.ServiceReference1.Esto importa el código generado por Agregar referencia de servicio en Visual Studio.El código crea una instancia del proxy de WCF y llama a cada una de las operaciones de servicio expuestas por el servicio de calculadora, cierra el proxy y finaliza.

Se ha completado el tutorial. Ha definido un contrato de servicio, implementado el contrato de servicio, generado un proxy WCF, configurado una aplicación cliente de WCF y a continuación usado el proxy para llamar a operaciones de servicio. Para probar la aplicación, ejecute primero GettingStartedHost para iniciar el servicio y ejecute después GettingStartedClient. La salida de GettingStartedHost debe ser similar a: El servicio está listo. Presione para finalizar el servicio.Suma recibida(100,15.99)Resultado: 115.99Resta recibida(145,76.54)Resultado: 68.46Multiplicación recibida (9,81.25)Resultado: 731.25División recibida (22,7)Resultado: 3.14285714285714

La salida de GettingStartedClient debe ser similar a: Add(100,15.99) = 115.99Subtract(145,76.54) = 68.46Multiply(9,81.25) = 731.25Divide(22,7) = 3.14285714285714Presione para terminar el cliente.

Solución de problemas con el tutorial de introducción .NET Framework 4.5 Otras versiones

En este tema se enumeran los problemas más comunes que se producen al desarrollar el Tutorial de introducción y se explica cómo resolverlos. 1. Los archivos del proyecto no se encuentran en el disco duro. 2. Se intentó ejecutar la aplicación de servicio: HTTP no pudo registrar la dirección URL http://+:8000/ServiceModelSamples/Service/. Su proceso no tiene los derechos de acceso a este espacio de nombres. 3. Se intentó usar la herramienta Svcutil.exe: 'svcutil' no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable. 4. No se encuentra el archivo App.config generado por Svcutil.exe. 5. Compilación de la aplicación cliente: 'CalculatorClient' no contiene una definición de '' ni se encontró ningún método de extensión '
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF