Microsoft Trainer e Software Architect
Sviluppatore professionista dal 2001 con VB6, SQL 2000 e Access creando applicazioni gestionali di varia natura. Passando rapidamente a .NET, windows e web, ho poi espanso le mie esperienze su Compact Framework, SQL Server Mobile ed infine BizTalk Server.
Negli ultimi anni mi sono focalizzato sempre più sullo sviluppo distribuito ed enterprise conseguendo nel contempo le seguenti certificazioni:
Microsoft Certified Trainer (MCT)Microsoft MCPD .NET 3.5 Enterprise Applications DeveloperMicrosoft MCTS .NET 3.5 WCF Applications DevelopmentMicrosoft MCTS .NET 3.5 ASP.NET Applications DevelopmentMicrosoft MCTS .NET 3.5 ADO.NET Applications DevelopmentMicrosoft MCTS .NET 3.5 Windows Applications DevelopmentMicrosoft MCTS .NET 2.0 Distributed Applications DevelopmentMicrosoft MCP .NET
ciao
DEMO
se abbiamo l’esigenza di usare dei servizi con più di un server a disposizione, e non vogliamo conoscere a priori l’URI del server… possiamo usare una tecnologia standard sui servizi SOAP detta WS-Discovery
il client è minimale, cerco il server, lo trovo, creo un proxy, lo chiamo:
//cerco il server DynamicEndpoint endpoint = new DynamicEndpoint(ContractDescription.GetContract(typeof(Services.IDateTimeService)), new WSHttpBinding(SecurityMode.None)); //stessa configurazione di sicurezza del server
//creo una factory per generare client var channel = new ChannelFactory<Services.IDateTimeService>(endpoint);
//creo un client-proxy per chiamarlo var risp = channel.CreateChannel();
//chiamo
Console.WriteLine(risp.GetServerTime()); Console.ReadLine();
il server è semplice, ma richiede un po di configurazione in più nel .config:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="meta"> <serviceDebug includeExceptionDetailInFaults="true"/> <serviceMetadata httpGetEnabled="true"/> <serviceDiscovery> <announcementEndpoints> <endpoint kind="udpAnnouncementEndpoint" /> </announcementEndpoints> </serviceDiscovery> </behavior> </serviceBehaviors> </behaviors> <services> <service name="Server.DateTimeService" behaviorConfiguration="meta"> <host> <baseAddresses> <add baseAddress="http://localhost/discoverytest"/> </baseAddresses> </host> <endpoint address="" binding="wsHttpBinding" bindingConfiguration="unsecure" contract="Server.IDateTimeService"/> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> <endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adHoc" /> </service> </services>
<standardEndpoints> <udpDiscoveryEndpoint> <standardEndpoint name="adHoc" discoveryMode="Adhoc"/> <standardEndpoint name="proxy" discoveryMode="Managed"/> </udpDiscoveryEndpoint> </standardEndpoints> <bindings> <wsHttpBinding> <binding name="unsecure"> <security mode="None" /> <!-- rimetti a Message per riabilitare la sicurezza integrata windows se hai i pc in dominio o i nomiutente collimano--> </binding> </wsHttpBinding> </bindings> </system.serviceModel> </configuration>
a presto