Notas de la lectura Resumen - modelo de canal y de unión

1. Introducción al modelo de canal:

Canal Pila: WCF para enviar y recibir mensajes de tubería mensaje de reanudación. Cada canal conjunto de pila tiene la oportunidad de procesar el mensaje, toda la pila puede editar el canal, puede ser insertado. Asegurar la flexibilidad.

modelo de canal y el aislamiento máximo cargo completo aislamiento, cualquiera de los servicios y el cliente se pueden configurar para un modelo de canal diferente. modelo de canal se puede dividir en superior e inferior dos partes: canales de protocolo se convierten anterior, los siguientes se convierten en el canal de transmisión. Un canal con una pluralidad de pilas puede ser el siguiente canal, pero en general, sólo un canal de transmisión, un canal de transmisión es responsable de codificar un mensaje enviado a ella extremo distal, el canal de transmisión que codifica pila codificador de canal requerida a continuación:

En general, el canal de protocolo responsable de qué función lógica no laborable del mensaje, incluyendo la transacción, día, mensajería y seguridad fiable,

Debe contener al menos un canal de transmisión y un codificador de canal, un canal de transmisión es responsable para codificar y transmitir mensajes. En concreto, el canal de transmisión a tratar de entender BindingContext objeto de encontrar que el codificador.

Si no puede encontrar el codificador se utiliza por defecto. Diferentes canales de transmisión que utilizan diferentes protocolos de transporte tales como: HTTP, TCP, IPC similares.

 

2. El patrón de intercambio de mensajes, y una forma de canal

los niveles de Mensajería: seis tipos de patrones de intercambio de mensajes:

En primer lugar, el modo datagrama

En segundo lugar, la solicitud - patrón de respuesta

Modo En tercer lugar, dúplex

El modo datagrama cuarto período de sesiones

En quinto lugar, la solicitud de sesión - patrón de respuesta

modo dúplex sexto período de sesiones

Un canal puede soportar una o modo interactivo varios, el canal al canal de modo interacción específica forma efectuar (forma de canal).

forma de canal se define pena enviar, recibir mensajes de acción de las interfaces 10, que se heredan de la interfaz ICHANNEL.

10 de los interfaces son: IInputChannel, IOutputChannel, IRequestChannel, IreplyChannel, IDuplexChannel, IInputSessionChannel, IOutputSessionChannel, IRequestSessionChannel, IReplySessionChannel, IDuplexSessionChannel.

 

3, datagrama modo: el remitente es responsable de enviar mensajes entre sí y recibir un mensaje de confirmación después de que el modo de interacción mensaje de finalización.

En este modo, el emisor puede determinar el mensaje único se envía correctamente. Correspondiente a si el mensaje finalmente llega al punto final, ya que además de ser exitosa, no saben cómo devolver un resultado. ilustración:

Ejemplo de código de envío de lado:

    pública  clase de salida
    {

        estática  vacío principal ( string [] args)
        {
            // acumulación pila canal personalizado 
            BindingElement [] = bindingElements nueva nueva BindingElement [ 3. ];
            bindingElements [ 0 ] = nuevo nuevo TextMessageEncodingBindingElement (); // codificación de texto
             //    bindingElements [. 1] = nuevo nuevo OneWayBindingElement (); // OneWayBindingElement de modo que el canal de transmisión puede soportar datagramas modo 
            bindingElements [ . 3 ] = nuevo nuevo la HttpTransportBindingElement (); // el Http transmisión 
            customBinding Encuadernación = nuevos nuevo customBinding (bindingElements);

            // 创建消息
            usando (mensaje Mensaje = nueva Message.CreateMessage (binding.MessageVersion, " sendMessage " , " Cuerpo del mensaje " ))
            {
                // 创建ChannelFactory 
                IChannelFactory <IOutputChannel> fábrica = binding.BuildChannelFactory <IOutputChannel> ( nuevo BindingParameterCollection ());

                // Abrir ChannelFactory 
                factory.Open ();

                // 创建IOutputChannel 
                IOutputChannel outputChannel = factory.CreateChannel ( nuevo EndpointAddress ( " http: // localhost: 9090.InputService " ));
               
                // Abrir IOutputChannel 
                outputChannel.Open ();

                // enviar 
                outputChannel.Send (mensaje);
                Console.WriteLine ( " enviado con éxito la información " );

                // 关闭IOutputChannel 
                outputChannel.Close ();

                // 关闭ChannelFactory 
                factory.Close ();
            }
        }

    }

Código de fin de recepción de muestras:

    público  de clase de entrada
    {
        estática  vacío principal ( string [] args)
        {
            // crear y transmitir el mismo extremo del canal de pila 
            BindingElement [] = bindingElements nuevo nuevo BindingElement [ 3. ];
            bindingElements [ 0 ] = nuevo nuevo TextMessageEncodingBindingElement (); // codificación de texto
                                                                          // bindingElements [. 1] = nuevo nuevo OneWayBindingElement (); // OneWayBindingElement de modo que el canal de transmisión puede soportar datagramas modo 
            bindingElements [ 2 ] = nuevo nuevo la HttpTransportBindingElement (); // el Http transmisión

            // Crear un enlace a medida 
            customBinding la unión = nueva nueva customBinding (bindingElements);

            // 建立ChannelListner 
            IChannelListener <IInputChannel> oyente = binding.BuildChannelListener <IInputChannel> ( nuevo Uri ( " http: // localhost: 9090 / InputService " ), nuevo BindingParameterCollection ());

            listener.Open (); // 打开ChannelListner

            // 创建IInputChannel 
            IInputChannel inputChannel = listener.AcceptChannel ();

            inputChannel.Open (); // Abrir IInputChannel 

            Console.WriteLine ( " empezar a recibir información " );
            Mensaje el Mensaje = inputChannel.Receive (); // recibir e imprimir información 
            Console.WriteLine ( " recibe un mensaje, la acción es: {0}, el cuerpo 1} a {. " , Message.Headers.Action, message.GetBody < Cadena > ());
            message.Close (); // Cerrar mensaje 
            inputChannel.Close (); // cerrar el paso 
            listener.Close (); // Cerrar oyente 
            Console.Read ();
        }


    }

 

4. Solicitud - Modo de Respuesta: El cliente envía un mensaje y recibe un mensaje de respuesta para completar una interacción. modo dúplex especial. Este mensaje de modo debe ser iniciada por el cliente y el servidor acaba de regresar de un mensaje al cliente después de enviar un mensaje para detener el flujo actual y esperar a que el servidor para devolver un mensaje, éste se aplica al protocolo HTTP. Como se muestra en el modo interactivo:

Cumplir con la solicitud - modo de respuesta, los clientes necesitan para implementar servidor de interfaz IRequestChannel IReplyChannel necesidad de implementar la interfaz de código de ejemplo:

El remitente:

 pública  clase de salida
    {
        estática  vacío principal ( string [] args)
        {
            BindingElement [] bindingElements = nuevo BindingElement [ 2 ];
            bindingElements [ 0 ] = nuevo TextMessageEncodingBindingElement (); // 文本编码 
            bindingElements [ 1 ] = nuevo HttpTransportBindingElement (); // Http传输

            // 自定义绑定 
            customBinding unión = nuevo customBinding (bindingElements);
            usando (mensaje Mensaje = Message.CreateMessage (binding.MessageVersion, " sendMessage " , " cuerpo de mensaje " ))
            {
                // 创建ChannelFactory 
                IChannelFactory <IRequestChannel> fábrica = binding.BuildChannelFactory <IRequestChannel> ( nuevo BindingParameterCollection ());

                factory.Open (); // ChannelFactory abierto

                // 创建IRequestChannnel 
                IRequestChannel requestChannel = factory.CreateChannel ( nuevo EndpointAddress ( " http: // localhost: 9090 / RequestReplayService " ));

                requestChannel.Open (); // abrir un pasaje 

                del Mensaje de respuesta = requestChannel.Request (Mensaje);
                 // enviar mensaje 
                Console.WriteLine ( " enviados correctamente un mensaje " );
                 // Comprobar mensaje devuelto 
                Console.WriteLine ( " recibe una establece el mensaje de retorno, la acción es: {0}, el cuerpo es:. {} 1 " , response.Headers.Action, response.GetBody < cadena > ());


                requestChannel.Close (); // cerrar el paso 
                factory.Close (); // cerrar la fábrica 
            }

        }

    }

 

El extremo receptor:

 público  de clase de entrada
    {
        estática  vacío principal ( string [] args)
        {
            // crear y transmitir el mismo extremo del canal de pila 
            BindingElement [] = bindingElements nuevo nuevo BindingElement [ 2 ];
            bindingElements [ 0 ] = nuevo   TextMessageEncodingBindingElement (); // 文本编码 
            bindingElements [ 1 ] = nuevo HttpTransportBindingElement (); // Http传输

            // enlace personalizado 
            customBinding Binding = nueva nueva customBinding (bindingElements);

            // 建立ChannelListner 
            IChannelListener <IReplyChannel> oyente = binding.BuildChannelListener <IReplyChannel> ( nuevo Uri ( " http: // localhost: 9090 / RequestReplyService " ), nuevo BindingParameterCollection ());

            listener.Open (); // supervisión abierto

            // 创建IReplyChannel 
            IReplyChannel replyChannel = listener.AcceptChannel ();

            replyChannel.Open (); // abrir el canal 
            Console.WriteLine ( " empezar a recibir mensajes .... " );
            RequestContext RequestContext = replyChannel.ReceiveRequest ();
            Console.WriteLine ( " recibe un mensaje, la acción es: {0}, el cuerpo es: {1} " ,
                requestContext.RequestMessage.Headers.Action,
                requestContext.RequestMessage.GetBody < cadena > ());
            // 创建返回消息 
            respuesta de mensaje = Message.CreateMessage (binding.MessageVersion, " respuesta " , " cuerpo de la respuesta " );

            // enviar un mensaje de retorno 
            requestContext.Reply (respuesta);

            requestContext.Close ();
            replyChannel.Close (); // cerrar el paso 
            listener.Close (); // Cerrar escucha 
        }


    }

 

5, el modo dúplex:

 

Supongo que te gusta

Origin www.cnblogs.com/professional-NET/p/12637314.html
Recomendado
Clasificación