Accedere ai servizi WCF con un'applicazione client di Windows Store
In Windows 8 è stato introdotto un nuovo tipo di applicazione denominato applicazioni Windows Store. Queste applicazioni sono progettate in base a un'interfaccia del touchscreen. .NET Framework 4.5 consente alle applicazioni Windows Store di chiamare i servizi WCF.
Supporto WCF nelle applicazioni Windows Store
Un subset di funzionalità WCF è disponibile in un'applicazione Windows Store. Per altre informazioni, vedere le sezioni seguenti.
Importante
Usare le API di diffusione WinRT anziché quelle esposte da WCF. Per altre informazioni, vedere API di diffusione WinRT
Avviso
L'uso di Aggiungi riferimento al servizio per aggiungere il riferimento di un servizio Web a un componente Windows Runtime non è supportato.
Associazioni supportate
Nelle applicazioni Windows Store sono supportate le associazioni WCF seguenti:
Nelle applicazioni Windows Store sono supportati gli elementi di associazione seguenti:
Sono supportate sia la codifica testo sia quella binaria. Inoltre, sono supportate tutte le modalità di trasferimento WCF. Per altre informazioni, vedere Streaming Message Transfer.
Aggiungi riferimento al servizio
Per chiamare un servizio WCF da un'applicazione Windows Store, usare la funzionalità Aggiungi riferimento al servizio di Visual Studio 2012. Si noteranno alcune modifiche di tale funzionalità quando eseguita in un'applicazione Windows Store. Innanzitutto non viene generato alcun file di configurazione. Nelle applicazioni Windows Store non vengono usati i file di configurazione, pertanto devono essere configurati nel codice. Questo codice di configurazione è disponibile nel file References.cs generato da Aggiungi riferimento al servizio. Per visualizzare questo file, accertarsi di selezione "Mostra tutti i file" in Esplora soluzioni. Il file si trova nei riferimenti al servizio, quindi nei nodi Reference.svcmap del progetto. Tutte le operazioni generate per i servizi WCF in un'applicazione Windows Store saranno asincrone mediante il modello asincrono basato su attività. Per altre informazioni, vedere Attività asincrone - Semplificare la programmazione asincrona con attività.
Poiché la configurazione viene generata nel codice, tutte le modifiche apportate al file Reference.cs verranno sovrascritte ogni volta che il riferimento al servizio viene aggiornato. Per risolvere questa situazione, il codice di configurazione viene generato all'interno di un metodo parziale, che è possibile implementare nella classe proxy del client. Il metodo parziale viene dichiarato come riportato di seguito:
static partial void Configure(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint,
System.ServiceModel.Description.ClientCredentials clientCredentials);
È quindi possibile implementare questo metodo parziale e modificare l'associazione o l'endpoint nella classe proxy del client come segue:
public partial class Service1Client : System.ServiceModel.ClientBase<MetroWcfClient.ServiceRefMultiEndpt.IService1>, MetroWcfClient.ServiceRefMultiEndpt.IService1
{
static partial void Configure(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint,
System.ServiceModel.Description.ClientCredentials clientCredentials)
{
if (serviceEndpoint.Name ==
ServiceRefMultiEndpt.Service1Client.EndpointConfiguration.BasicHttpBinding_IService1.ToString())
{
serviceEndpoint.Binding.SendTimeout = new System.TimeSpan(0, 1, 0);
}
else if (serviceEndpoint.Name ==
ServiceRefMultiEndpt.Service1Client.EndpointConfiguration.BasicHttpBinding_IService11.ToString())
{
serviceEndpoint.Binding.SendTimeout = new System.TimeSpan(0, 1, 0);
clientCredentials.UserName.UserName = "username1";
clientCredentials.UserName.Password = "password";
}
else if (serviceEndpoint.Name ==
ServiceRefMultiEndpt.Service1Client.EndpointConfiguration.NetTcpBinding_IService1.ToString())
{
serviceEndpoint.Binding.Name = "MyTcpBinding";
serviceEndpoint.Address = new System.ServiceModel.EndpointAddress("net.tcp://localhost/tcp");
}
}
}
Serializzazione
Nelle applicazioni Windows Store sono supportati i serializzatori seguenti:
DataContractSerializer
DataContractJsonSerializer
XmlSerializer
Avviso
XmlDictionaryWriter.Write (DateTime) consente ora di scrivere un oggetto DateTime come stringa.
Sicurezza
Nelle applicazioni Windows Store sono supportate le modalità di sicurezza seguenti:
Nelle applicazioni Windows Store sono supportati i tipi di credenziali client seguenti:
None
Di base
Digest
Negotiate
NTLM
Finestre
Username (sicurezza del messaggio)
Windows (sicurezza del trasporto)
Per consentire alle applicazioni Windows Store di accedere e inviare le credenziali di Windows predefinite, è necessario abilitare questa funzionalità nel file Package.appmanifest. Aprire il file e selezionare la scheda delle funzionalità, quindi scegliere le "Credenziali di Windows predefinite". In questo modo le applicazioni possono connettersi alle risorse Intranet che richiedono le credenziali del dominio.
Importante
Per consentire alle applicazioni Windows Store di effettuare chiamate su più computer, è necessario abilitare un'altra funzionalità denominata "Rete casa/lavoro". Anche questa impostazione è disponibile nella scheda delle funzionalità del file Package.appmanifest. Selezionare la casella di controllo Rete casa/lavoro. In questo modo viene fornito l'accesso in ingresso e in uscita dell'applicazione in uso alle reti delle posizioni affidabili dell'utente come casa e lavoro. Le porte critiche in ingresso sono sempre bloccate. Per accedere ai servizi su Internet è inoltre necessario abilitare la funzionalità Internet (client).
Varie
L'uso delle classi seguenti è supportato per le applicazioni Windows Store:
Definizione dei contratti di servizio
Si consiglia di definire solo operazioni del servizio asincrone mediante il modello asincrono basato su attività. In questo modo viene garantita la risposta delle applicazioni Windows Store durante la chiamata a un'operazione del servizio.
Avviso
Sebbene non venga generata alcuna eccezione se si definisce un'operazione sincrona, è consigliabile definire solo le operazioni asincrone.
Chiamata dei servizi WCF da applicazioni Windows Store
Come detto in precedenza, tutte le configurazioni devono essere eseguite nel codice nel metodo GetBindingForEndpoint della classe proxy generata. La chiamata di un'operazione del servizio viene effettuata in modo analogo al metodo asincrono basato su attività, come illustrato nel seguente frammento di codice.
void async SomeMethod()
{
ServiceClient proxy = new ServiceClient();
Task<T> results = await proxy.CallAsync(param1, param2);
T result = results.Result;
if (result.Success)
{
// Do something with result
}
}
Si noti l'uso della parola chiave async nel metodo con cui si effettua la chiamata asincrona e la parola chiave await quando viene chiamato il metodo asincrono.