Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El ejemplo muestra cómo crear un enlace diseñado para admitir escenarios de transmisión por secuencias cuando se usa el transporte HTTP.
Nota
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
Los pasos para crear y configurar un nuevo enlace estándar son como sigue.
Crear un nuevo enlace estándar
Los enlaces estándar en Windows Communication Foundation (WCF) como basicHttpBinding y netTcpBinding configuran los transportes subyacentes y la pila del canal para los requisitos concretos. En este ejemplo,
WSStreamedHttpBindingconfigura la pila del canal para permitir el vertido. De forma predeterminada, la seguridad del WS y la mensajería de confianza no se agregan a la pila del canal porque ambas características no se admiten en el vertido. El nuevo enlace se implementa en la claseWSStreamedHttpBindingque deriva de Binding. ElWSStreamedHttpBindingcontiene los siguientes elementos de enlace: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement, y TextMessageEncodingBindingElement. La clase proporciona un métodoCreateBindingElements()para configurar la pila de enlace resultante, como se muestra en el código muestra siguiente.public override BindingElementCollection CreateBindingElements() { // return collection of BindingElements BindingElementCollection bindingElements = new BindingElementCollection(); // the order of binding elements within the collection is important: layered channels are applied in the order included, followed by // the message encoder, and finally the transport at the end if (flowTransactions) { bindingElements.Add(transactionFlow); } bindingElements.Add(textEncoding); // add transport (http or https) bindingElements.Add(transport); return bindingElements.Clone(); }Añadir la compatibilidad de configuración
Para exponer el transporte a través de la configuración, el ejemplo implementa dos clases más,
WSStreamedHttpBindingConfigurationElementyWSStreamedHttpBindingSection. La claseWSStreamedHttpBindingSectiones unStandardBindingCollectionElement que exponeWSStreamedHttpBindingal sistema de configuraciónWCF. El volumen de la implementación se delega aWSStreamedHttpBindingConfigurationElement, lo cual deriva de StandardBindingElement. La claseWSStreamedHttpBindingConfigurationElementtiene propiedades que corresponden a las propiedades deWSStreamedHttpBindingy funciones para asignar cada elemento de configuración a un enlace.Registre este controlador con el sistema de configuración, agregando la siguiente sección al archivo de configuración pertinente.
<configuration> <system.serviceModel> <extensions> <bindingExtensions> <add name="wsStreamedHttpBinding" type="Microsoft.ServiceModel.Samples.WSStreamedHttpBindingCollectionElement, WSStreamedHttpBinding, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" /> </bindingExtensions> </extensions> </system.serviceModel> </configuration>A continuación, el controlador puede establecer referencia desde la sección de configuración serviceModel.
<configuration> <system.serviceModel> <client> <endpoint address="https://localhost/servicemodelsamples/service.svc" bindingConfiguration="Binding" binding="wsStreamedHttpBinding" contract="Microsoft.ServiceModel.Samples.IStreamedEchoService"/> </client> </system.serviceModel> </configuration>
Para configurar, generar y ejecutar el ejemplo
Asegúrese de que ha realizado los pasos enumerados en Procedimiento de instalación único para ejemplos de Windows Communication Foundation.
Asegúrese de que ha realizado Instrucciones de instalación del certificado de servidor de Internet Information Service (IIS).
Para generar la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en una configuración de equipos cruzados, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.
Cuando se muestre la ventana de cliente, escriba "Sample.txt." Debería encontrar una "Copy of Sample.txt" en su directorio.
Servicio de muestra WSStreamedHttpBinding
El servicio del ejemplo que utiliza WSStreamedHttpBinding se encuentra en el subdirectorio del servicio. La implementación de OperationContract utiliza MemoryStream para recuperar primero todos los datos de la secuencia de entrada antes de devolver MemoryStream. El servicio de muestra está hospedado en Internet Information Servers (IIS).
[ServiceContract]
public interface IStreamedEchoService
{
[OperationContract]
Stream Echo(Stream data);
}
public class StreamedEchoService : IStreamedEchoService
{
public Stream Echo(Stream data)
{
MemoryStream dataStorage = new MemoryStream();
byte[] byteArray = new byte[8192];
int bytesRead = data.Read(byteArray, 0, 8192);
while (bytesRead > 0)
{
dataStorage.Write(byteArray, 0, bytesRead);
bytesRead = data.Read(byteArray, 0, 8192);
}
data.Close();
dataStorage.Seek(0, SeekOrigin.Begin);
return dataStorage;
}
}
Cliente de muestra WSStreamedHttpBinding
El cliente que se utiliza para interactuar con el servicio mediante WSStreamedHttpBinding se encuentra en el subdirectorio del cliente. Dado que el certificado utilizado en este ejemplo es un certificado de prueba creado con Makecert.exe, se muestra una alerta de seguridad al intentar tener acceso a una dirección HTTPS como https://localhost/servicemodelsamples/service.svc, en su explorador. Para permitir al cliente WCF trabajar con un certificado de prueba, se ha añadido algún código adicional al cliente para suprimir la alerta de seguridad. El código y la clase que lo acompaña no son necesarios cuando se usan certificados de producción.
// WARNING: This code is only required for test certificates such as those created by makecert. It is
// not recommended for production code.
PermissiveCertificatePolicy.Enact("CN=ServiceModelSamples-HTTPS-Server");
.gif)
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.