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 WSStreamedHttpBinding muestra cómo crear un enlace diseñado para admitir escenarios de streaming 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 los siguientes.
Creación de un nuevo enlace estándar
Los enlaces estándar de Windows Communication Foundation (WCF), como basicHttpBinding y netTcpBinding, configuran los transportes subyacentes y la pila de canales para requisitos específicos. En este ejemplo,
WSStreamedHttpBindingconfigura la pila de canales para admitir el streaming. De forma predeterminada, WS-Security y mensajería confiable no se agregan a la pila de canales porque ambas características no son compatibles con el streaming. El nuevo enlace se implementa en la claseWSStreamedHttpBindingque deriva de Binding.WSStreamedHttpBindingcontiene los siguientes elementos de enlace: HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElementy TextMessageEncodingBindingElement. La clase proporciona unCreateBindingElements()método para configurar la pila de enlace resultante, como se muestra en el código de ejemplo 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 soporte de configuración
Para exponer el transporte a través de la configuración, el ejemplo implementa dos clases más:
WSStreamedHttpBindingConfigurationElementyWSStreamedHttpBindingSection. La claseWSStreamedHttpBindingSectiones un StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration> que exponeWSStreamedHttpBindingal sistema de configuración de WCF. La mayor parte de la implementación se delega enWSStreamedHttpBindingConfigurationElement, que deriva de StandardBindingElement. La claseWSStreamedHttpBindingConfigurationElementtiene propiedades que corresponden a las propiedades deWSStreamedHttpBindingy funciones para mapear cada elemento de configuración a un enlace.Registre el controlador con el sistema de configuración agregando la siguiente sección al archivo de configuración del servicio.
<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, se puede hacer referencia al controlador 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, compilar y ejecutar el ejemplo
Instale ASP.NET 4.0 con el comando siguiente.
%windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enableAsegúrese de que ha realizado los pasos enumerados del procedimiento de configuración única de los ejemplos de Windows Communication Foundation.
Asegúrese de que ha realizado las instrucciones de instalación de certificados de servidor de Internet Information Services (IIS).
Para compilar la solución, siga las instrucciones de Creación de ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en una configuración entre máquinas, siga las instrucciones de Ejecución de los ejemplos de Windows Communication Foundation.
Cuando se muestre la ventana del cliente, escriba "Sample.txt". Debería encontrar una "Copy of Sample.txt" en su directorio.
Servicio de muestra WSStreamedHttpBinding
El servicio de ejemplo que usa WSStreamedHttpBinding se encuentra en el subdirectorio de servicio. La implementación de OperationContract utiliza un MemoryStream para recuperar primero todos los datos de la secuencia entrante antes de devolver el MemoryStream. El servicio de ejemplo se hospeda en Internet Information Services (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 usa para interactuar con el servicio mediante WSStreamedHttpBinding se encuentra en el subdirectorio de cliente. Dado que el certificado usado en este ejemplo es un certificado de prueba creado con Makecert.exe, se muestra una alerta de seguridad al intentar acceder a una dirección HTTPS en el explorador, como https://localhost/servicemodelsamples/service.svc. Para permitir que el cliente WCF funcione con un certificado de prueba, se ha agregado código adicional al cliente para suprimir la alerta de seguridad. El código y la clase que lo acompaña no son necesarios al usar 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");