CESAR DE LA TOR... 的个人资料Blog de CESAR DE LA TORR...照片日志列表更多 ![]() | 帮助 |
|
3月6日 ¡¡Por fín tenemos WCF en .NET Compact Framework (v.3.5)!!Pues eso, ¡¡WCF en NETCF 3.5!!, algo muy esperado por todos... aunque todavía en BETA (.NET Compact Framework 3.5), pero algo es algo!! ;-)
Mirad este link, no tiene desperdicio y con una foto del equipo de desarrollo de NETCF 3.5 (.NET Compact Framework 3.5)!!
Parecen los marines!! ;-)
Además de poder consumir servicios WCF desde NETCF 3.5, también están implementando ciertas características de LINQ compact framework. :-) Otras novedades de WCF en .NET 3.5 (VS.Orcas)¡¡Mas novedades de WCF(Indigo) en .NET 3.5 (VS.ORCAS)!!
(*) Soporte REST en WCF:
En .NET 3.5 podemos desarrollar servicios WCF en 'estilo REST' (Representational State Transfer). Para más información sobre REST: http://uk.builder.com/0,39026540,39257177,00.htm http://www.xfront.com/REST-Web-Services.html http://www-128.ibm.com/developerworks/xml/library/ws-restvsoap/ http://webservices.sys-con.com/read/79282.htm (*) Mas estándares WS-*, sobre todo transaccionales. Implementación de las últimas especificaciones OASIS de WS-AtomicTransaction 1.1, Web Services Coordination (WS-Coordination) 1.1, WS-ReliableMessaging 1.1 y WS-SecureConversation.
(*) Soporte RSS y API de sindicación ATOM Los servicios WCF pueden ahora de forma sencilla exponer datos sindicados que sean consumidos por clientes RSS ó ATOM. Servicios WCF 'AJAX enabled' en .NET 3.5En la Beta de .NET 3.5 (CTP de Marzo con VS.ORCAS) podemos implementar servicios WCF que puedan ser consumidos/accedidos desde AJAX!!. Esto es una muy buena noticia, porque hasta ahora lo normal era consumir con AJAX Servicios-Web-XML básicos (Basic-Profile, ASMX, etc.).
2月7日 Autenticación Membership en Servicios WCF (Windows Communication Foundation)Autenticación en WCF con token de seguridad ASP.NET Membership Configuración de Servicio WCF para soportar autenticación Membership Una vez tenemos configurado el proveedor Membership en el .config (no lo pongo porque es algo específico de Membership de ASP.NET 2.0, no exclusivo de WCF), tenemos que configurar una sección de tipo ‘Behavior de WCF’.
En esta sección definimos un behavior de servicio (comportamiento de servicio) donde especificamos que la autenticación se basará en credenciales de tipo usuario-password y en concreto en un proveedor Membership determinado (en este caso ‘SqlMembershipProvider’).
<system.serviceModel>
……………………………………………………
<services>
<service name="MiServicioLib.MiServicio"
behaviorConfiguration="MiSvcMembershipSecBehavior" >
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/MiServicio/" />
</baseAddresses>
</host>
<endpoint name="ConfigMiServicioWsHttpMembershipSec"
address=" http://localhost:8000/MiServicio/Membership"
binding="wsHttpBinding"
bindingConfiguration="MiBindingConf" contract="MiServicioLib.IMiContrato" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="MiBindingConf">
<security mode ="Message">
<message clientCredentialType ="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
……………………………………………………
</system.serviceModel>
¡Pues con esto ya estaría todo!. Autenticar contra Membership en servicios WCF es muy útil por ejemplo para escenarios en Internet. :-) 1月9日 Cómo instalar automáticamente PNRP e IPv6 en Windows XP SP2Para la mayoría de aplicaciones P2P de WCF, puesto que requieren del protocolo PNRP, es bueno poder instalar ese protocolo (al igual que IPv6) de alguna forma automatizada en las máquinas clientes. Esto se puede hacer por 'línea de comando':
1. Guardar en un fichero local de texto, p.e. HabilitarPnrpSobreXPSP2.txt. en %SystemDrive% la siguiente configuración:
[Components]
Netoc=on [NetOptionalComponents] P2P=1 2. Ejecutar el siguiente comando en 'línea de comandos para instalar IPv6 en la máquina (puesto que P2P requiere IPv6) netsh int ipv6 install 3. Ejecutar el siguiente comando para instalar el Pack de red de P2P (PNRP), que ahora se llama 'Advanced Networking pack':
%systemroot%\system32\Sysocmgr.exe /i:%systemroot%\inf\sysoc.inf /u:%SystemDrive%\HabilitarPnrpSobreXPSP2.txt /q /w
Servicios P2P de WCF: Qué son, Software y Plataforma necesaria.En WCF hay una 'binding' especial para desarrollar servicios P2P (Peer To Peer).
Realmente no es solo el binding sino la forma de desarrollar el servicio lo que cambia. Los servicios P2P (peer-to-peer) NO siguen el patrón típico de Servicio/Servidor y Clientes atacando, como son los Servicios-Web básicos (ASMX) o los Servicios WCF normales. Los servicios P2P son servicios en los que todos los clientes son al mismo tiempo los servicios y viceversa.
Para que quede claro, el mejor ejemplo de un servicio P2P es eMule (que no está hecho con WCF, por ahora... ;-) ), donde todos los clientes hablan unos con otros directamente y NO pasa la comunicación por un servidor. Esta es la principal diferencia con los servicios DUPLEX de WCF con suscripciones donde puede haber muchos clientes pero las comunicaciones están centralizadas en un servicio del servidor, los clientes no se comunican directamente, como SI pasa en cambio con los servicios P2P.
Otra cosa es que exista algún tipo de servidor para poner 'en contacto' a los diferentes clientes P2P (red de clientes), pero las comunciaciones/datos en P2P van directamente desde un cliente a otro.
Centrándonos en WCF, el P2P de WCF está basado a su vez en un protocolo de mas bajo nivel específico para comunicaciones P2P. Este protocolo es PNRP (Peer Name Resolution Protocol), que actualmente en plataforma Microsoft vamos por la versión PNRP v2 (en Windows VISTA), y en XP-SP2 hay que bajarlo e instalar esta versión V2 a parte.
El software y plataforma necesaria para un servicio P2P de WCF es:
- SISTEMA OPERATIVO: (Windows Vista ó Windows XP SP2).
- IPv6 (Disponbile en Windows Vista y en Windows XP, pero hay que instalarlo específicamente).
- Protocolo PNRP v2 (Disponible en Windows Vista; a instalar en XP-SP2). Para XP-SP2, bajarlo de esta URL:
Windows XP-SP2 tiene la versión PNRP v1, pero es recomendable la versión 2 de PNRP porque esta es compatible con otros clientes P2P de Windows Vista.
- .NET Framework 3.0 y 2.0
En los equipos de desarrollo, a parte de lo anterior, VS.2005, add-ins de WCF para VS.2005, etc.
1月8日 Libros de WCF (Windows Communication Foundation)En este posting iré poniendo libros que merezcan la pena sobre WCF. Hasta ahora no hay casi nada...
Este tiene buena pinta y hay buenos comentarios en Internet, pero todavía no está disponible, ya veremos... :-)
Programming WCF Services
Seguiré poniendo libros buenos de WCF aquí... 1月3日 Formas de hacer Debugging en Servicios WCFBásicamente, hay tres formas de hacer debugging a servicios WCF:
a.- Crear una aplicación de consola que haga hosting del servicio WCF y hacer debugging a partir de esa aplicación de consola
b.- Crear un proyecto ASP.NET que realice llamadas al servicio WCF. c.- Insertar en los métodos del servicio una llamada a 'Debugger.Lauch()' que hace que se abra la ventana de debugging. La de 'Debugger.Lauch()' es curiosa, pero claro, es código que se debería quitar en el servicio 'en producción'.
En los casos en los que dependamos de IIS, habrá que hacer un 'attach to process' de Visual Studio al proceso del pool de IIS (w3wp.exe en Vsita y Win2003 y aspnet_wp.exe en Windows XP), o a varios si no sabes cual es el tuyo, porque puedes tener varios worker-process de varios pools de IIS arrancados... ;-)
12月28日 Artículos MSDN sobre WCF traducidos por mi.He hecho una colaboración con MSDN traduciendo varios artículos sobre WCF.
Son los siguientes:
Aprende el ABC de la programación de Windows Communication Foundation
Visión Global de Arquitectura de Windows Communication Foundation(Traducidos por César de la Torre, MVP-Connected Systems)11月14日 Se ha liberado la versión definitiva (RTM) de .NET 3.0Se acaba de liberar la versión definitiva (RTM) de .NET 3.0, y por lo tanto, de las versiones definitivas de WCF, WF, WPF y CardSpace.
¡Por fin!, se me ha hecho larga la espera desde hace cerca de dos años que llevo tocando WCF y unos 3 años con WSE. Bueno, ya tenemos la versión definitiva de .NET 3.0 (WinFX)con la que implementar proyectos. :-)
Especialmente sobre WCF, para mi es algo muy esperado. Hace mas de 6 años que Microsoft comenzó con las especificaciones SOAP para conseguir un estandard interoperable con toda la industria (IBM, BEA, etc.) y después comenzaron las definiciones de las especificaciones de WS-*, arquitecturas SOA e implementaciones incipientes de WS-* como WSE 1.0, 2.0 y 3.0. Pero WCF (Windows Communication Foundation aka. INDIGO) es la implementación reina por excelencia por parte de Microsoft de las especificaciones WS-*. Se lleva desarrollando INDIGO en paralelo a WSE durante unos 5 años, así que va a ser una revolución en el mundo de aplicaciones distribuidos y lo que Microsoft llama ahora 'Sistemas Conectados'.
La palabra que para mi define mejor a WCF es DESACOPLAMIENTO. Puedes realizar comunicaciones 'one-way', 'request-response'(tipo RPC), o conexiones DUPLEX, o puedes elegir en utilizar como protocolo de transporte bien HTTP, TCP, Named-Pipes, Peer-to-Peer, MSMQ o incluso tu propia elección de protocolo con tu propia implementación (p.e. SMTP ó UDP). O se puede utilizar la autenticación y autorización que se quiera (Windows, Membership, AzMan, etc.) y estándares de seguridad WS-Security, para cifrado, firma, seguridad federada (WS-FederationServices), etc. Y lo bueno es que ahora es una única forma de trabajar: WCF. No diferentes tecnologías dependiendo de lo que escogías (como pasaba con ASMX, .NET Remoting, DCOM, Enterprise-Services/COM+, etc.). En definitiva es la unificación de las implemetnaciones de tecnologías distribuidas base por parte de Microsoft. En mi opinión va a ser la base para una revolución en el mundo de las aplicaciones distribuidas basadas en SOA y tecnología Microsoft. :-) Bueno, pues aquí están las URLs:
Microsoft .NET Framework 3.0 Redistributable Package
Visual Studio 2005 extensions for WCF & WPF, (November 2006 CTP)
Visual Studio 2005 Extensions for Windows Workflow Foundation
Microsoft Windows Software Development Kit for Windows Vista and .NET Framework 3.0 Runtime Components
BLOG de noticias de .NET 3.0 (aka. WinFx)
10月21日 ¿Qué son las 'WCF Extensions'?Basicamente, el interfaz IExtension<> nos permite extender cualquier clase que implemente el interfaz IExtensibleObject<>. Este interfaz IExtensibleObject<> tiene una propiedad que proporciona acceso a todas las extensiones del objeto.
IExtension<> nos permite enganchar nuestra extension en el objeto que queremos extender, utilizando el método Attach(), el cual es llamado por el propio runtime de WCF cuando se está inicializando el entorno de WCF (o sea, cuando se llama a serviceHost.open() ). Estas extensiones son un acaracterística de WCF que puede utilizarse con diferentes objetos como channels, contextos, etc. Un buen ejemplo muy útil es utilizar una Extensión WCF para relacionar un Workflow-WF con un Servicio-WCF que lo vaya a publicar y por lo tanto vaya a hacer hosting de dicho Workflow-WF. Precisamente, en el método Attach() de la ‘Extensión WCF’ es donde se arrancaría el RunTime de WorkflowFoundation y quedaría ahí relacionado con el proceso Host de WCF. Una ‘WCF Extension’ se crea de una forma similar a la siguiente, en este caso utilizando un Host-WCF de tipo Consola: class Host { static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(MiServicioWCF))) { ExtensionHostServicioWF extensionServicioWF = new ExtensionHostServicioWF(); // Añadimos la Extension a la colección de Extensiones del Host del Servicio-WCF
host.Extensions.Add(extensionServicioWF); host.Open();
Console.WriteLine("El Servicio-WCF publicador del Workflow-WF, está disponible."); Console.WriteLine("Presiona <ENTER> para finalizar el servicio WCF."); Console.ReadLine(); } } }
La clase de la ‘WCF Extension’, en este caso la he llamado ‘ExtensionHostServicioWF’ porque voy a arrancar ahí el RunTime de WF (Workflow Foundation) y dejarlo preparado para arrancar instancias de Workflows cuando se llamen a métodos de mi Servicio-WCF. La clase ‘Extension’ es algo así:
public class ExtensionHostServicioWF : IExtension<ServiceHostBase>, IDisposable { private WorkflowRuntime _runtimeWorkflow; ………………………… ………………………… void IExtension<ServiceHostBase>.Attach(ServiceHostBase owner) { // (CDLTLL) // Cuando se hace un attach de esta Extension dentro del Host del Servicio, // se crea una instancia nueva del WorkflowServiceContainer _runtimeWorkflow = new WorkflowRuntime(); _runtimeWorkflow.ServicesExceptionNotHandled += new EventHandler<ServicesExceptionNotHandledEventArgs>(workflowRuntime_ServicesExceptionNotHandled);
ExternalDataExchangeService dataExchangeService = new ExternalDataExchangeService(); _runtimeWorkflow.AddService(dataExchangeService); // Arrancamos los servicios asociados con el contenendor (runtime del Workflow) _runtimeWorkflow.StartRuntime(); } Además de este concepto de WCF-Extension, para trabajar contra WF desde WCF(Indigo), en este caso queremos hacer hosting de WF dentro de un servicio-WCF(Indigo), tenemos que utilizar otro concepto muy útil para comunicar datos desde WCF hacia WF y viceversa, llamado ‘Servicio Local de Intercambio de Datos Externos’ y está basado en la clase ExternalDataExchangeService,que pertenece al namespace System.Workflow.Activities de WF(Workflow Foundation). Es un servicio local del runtime de WF. Este tipo de servicios no tiene nada que ver con los Servicios-WCF. Estos servicios WF son sistemas o extensiones locales del runtime de WF, no tienen nada que ver con comunicaciones remotas de WCF.
Para ver mas información sobre estas 'WCF Extensions', consultar en el siguiente enlace de MSDN SDK:
No hay actualmente mucha información en Internet sobre todo esto, esperemos que vaya saliendo mas info. y ejemplos.
10月11日 Errores 'ProtocolExceptions' con WCF en llamadas callbacks de canales Duplex sobre conexiones DSL o conexiones con ancho de banda pequeño.Mi colega y amigo David Rodriguez y yo hemos tenido problemas con comunicaciones DUPLEX de WCF haciendo uso de CALLBACKS, cuando la comunicación se transmitía sobre una línea xDSL. El problema lo describo a continuación y está en inglés reportado e MICOSOFT CONNECT. Finalmente, es un BUG que ha reconocido Microsoft, pero también hay un WORKAROUND que puede sacar de un apuro a quien se encuentre con el mismo problema.
El problema y el BUG están reportados en Microsoft Connect en esta URL: http://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=201914 El objetivo principal era conseguir pasar un objeto Bitmap mediante una función callback de WCF. El objetivo secundario era mantener un mecanismo de Keep-Alive de las sesiones, para asegurar que la llamada a la función callback puede realizarse.
Descripción de procesos:
Hay 3 procesos. InternetCommunications.HostConsole, es el servicio SOA alojado en Internet, al cual se conectarán los diferentes clientes. Hace de puente entre los otros 2 procesos. Implementa 2 servicios SOA, uno para cada cliente. HomeCommunications.HostConsole, es el cliente permanente que proporciona el objeto Bitmap. Puede haber 'n' procesos corriendo en distintas direcciones IP. Se debe mantener sesión. Implementa mecanismo de keep-alive, mediante un bucle en un workerthread, haciendo llamadas cada minuto. InternetCommunications.Tester, es el cliente que pide el Bitmap que está en el proceso HomeCommunications. Problemas:
En la misma máquina los 3 procesos, el funcionamiento es correcto, no se ven excepciones en el panel de Debug de VS. Si el Proceso InternetCommunications.HostConsole está en Internet con los puertos publicados 8003 y 8004 (uno para cada servicio SOA), empiezan los problemas. Normalmente la primera llamada devuelve el Bitmap hasta el tester, pero justo después empiezan a aparecer Excepciones del System.ServiceModel en la venta de Debug de VS, esto provoca la caida del canal y las sieguientes llamadas al objeto callback fallan debido a que el canal está Faulted (aunque el evento OnFaulted no se dispara). El mecanismo de Keep-Alive, desconectay vuelve a conectar el canal y mediante el registro se vuelve a reestablecer el objecto callbak, y al cabo del tiempo vuelve a funcionar, pero una nueva llamada vuelve a tirar el canal. Parece un problema de Timeouts, pero están sobradamente dimensionados a 12 minutos. La imagen es de un tamaño de unos 35k. Las trazas de WCF reflejan fallos de TCP sockets, y en ocasiones un ArgumentException, que no sé realmente cuando se produce. Finalmente, tras reportarlo a Microsoft, se descubrió un BUG de WCF. Este es el resultado aportado por Microsoft:
Publicado por Microsoft el 10/10/2006 a las 13:55
The problem is a bug in the WCF product (bug#61159), where IDisposable parameters or return value interact poorly with the RM retry mechanism.
The workaround is to put [OperationContract(AutoDisposeParameters=false)] on your operations that transferred Bitmaps. Lo bueno es que han aportado un workaround y se resuelve el problema hasta que corrijan el BUG. :-) 10月4日 WCF (Indigo) y .NET Compact Framework para Windows MobileAlgo muy importante para las aplicaciones mobile de tipo 'smart client' (formularios Windows Mobile accediendo a Servicios remotos) es el sistema de comunicación con los Servicios-SOA y/o Servicios Web. Actualmente con .NET Compact Framework el acceso a Web-Services estandar es un poco pesado/lento y vendría muy bien un sistema mas óptimo y ligero como es WCF con un binding NetTcpBinding (TCP como transporte y formato binario mas óptimizado viajando por la red)...
Sin embargo, parece que por ahora tendremos que esperar mas pues con la aparición del primer RELEASE de WCF cuando se libere .NET FRMEWORK 3.0 parece que no va a salir simultaneamente '.NET compact Framework 3.0', sino que saldrá mas adelante...
Por supuesto, se puede consumir Servicios-WCF desde Compact-Framework haciendo uso del BasicHttpBinding (WS-I Basic Profile), pero esto finalmente ofrece un rendimiento que será practicamente el mismo que si el servicio es un Web-Service ASMX 2.0....
Mas información sobre todo esto:
: Will there be a .NET Compact Framework 3.0 release with release of .NET Framework 3.0? http://msdn.microsoft.com/winfx/learning/netfx3faq/default.aspx César 9月28日 Problema de seguridad con Servicio-WCF 'Self-Hosted' y Windows VistaHaciendo pruebas con servicios WCF 'Self-Hosted' (servicio en tu propio proceso, en un Servicio-Windows o Consola, etc.) y Windows Vista RC1, aparece un problema de seguridad. Da el siguiente error al intentar arrancar el Servicio-WCF (en mi caso una app. de Consola):
"System.ServiceModel.AddressAccessDeniedException: HTTP could not register URL http://+:8080/<...>. Your process does not have access rights to this namespace (see here. for details). ---> System.Net.HttpListenerException: Access is denied"
y
"HTTP could not register URL Your process does not have access rights to this namespace"
Esto es debido al nuevo sistema de seguridad de Windows Vista cuando requiere entorno de ejecución con permisos de Administración y te pregunta si quieres ejecutar algo como Administrador aun cuando tu usuario sea Administrador (para evitar accesos no autorizados de VIRUS, gusanos, etc.). El problema es que cuando es un Servicio-WCF, no te pregunta y simplemente da este error. (Por ejemplo al intentar arrancarlo haciendo DEBUGGING con VS.2005, etc.).
La solución inicial es arrancar VS.2005 con la opción "Run as Administrator" del botón derecho. O lo mismo si arrancas directamente el .EXE del servicio sin hacer DEBUGGING.
Otra opción es deshabilitar la POLITICA que realiza este tipo de preguntas de seguridad (UAC model de Windows Vista ), por ejemplo, con el siguiente comando se puede deshabilitar para un Servicio concreto:
add urlacl url=http://+:8080/MiServicioWCF/ServEjemplo user=MIPC\ctorre
La URL es lógicamente la utilizada por el Servicio y el usuario es quien vaya a permitirse esta ejecución. Puede dejarse mas abierto permitiéndolo a grupos del dominio o de máquina, pero esto incrementaría los riesgos de seguridad. Depende de qué entorno estemos hablando.
Destacar que esto solo pasa con Servicios-WCF self-hosted en consola o formularios windows. Por ejemplo, con un servicio con hosting en IIS, WAS, o incluso en un Servicio-Windows/NT, no se produce la restricción de seguridad de Windows Vista.
HotFix necesario para que funcione WS-AT (WS-AtomicTransactions) de WCF en Windows XP ó Windows Server 2003Hoy estaba probando una gran novedad de WCF-Indigo..., ¡¡Las transacciones distribuidas entre varios Servicios-WCF!! y hay que tener cuidado porque para que funcione no vale solamente con desarrollar tu código de tus servicios, etc. Hay también que configurar el soporte a 'WS-Atomic Transaction', vamos, configurar aspectos nuevos relativos al DTC. Para hacer esto, se puede hacer de dos formas:
1.- Con la utilidad 'wsatConfig.exe' (solamente para una máquina, no para varias máquinas en red). Concretamente así:
WsatConfig.exe –network:enable –port:443 –endpointCert:<machine|"Issuer\SubjectName"> -restart
Ver:
SIN EMBARGO, en la RC del SDK de WCF ahora no aparece esta utilidad...
2.- Con un nuevo snap-in situado en el snap-in de COM+ y el DTC, en las propiedades de 'My Computer'. Aparece nuevo este snap-in siempre que registres la DLL de dcho nuevo snap-in, asi:
regasm.exe /codebase WsatUI.dll
SIN EMBARGO, el snap-in 'famoso', NO FUNCIONA en Windows XP ó Windows Server 2003 a no ser que se instale anteriormente un HOTFIX o UPDATE:
Un poco 'truculento' todo esto, pero por ahora, con las BETAS y RCs, es así... ;-)
|
|
|