Accesso ai servizi WCF con un'applicazione client Windows StoreAccessing WCF Services with a Windows Store Client App

In Windows 8 è stato introdotto un nuovo tipo di applicazione denominato applicazioni Windows Store.Windows 8 introduces a new type of application called Windows Store applications. Queste applicazioni sono progettate in base a un'interfaccia del touchscreen.These applications are designed around a touch screen interface. .NET Framework 4.5 consente alle applicazioni Windows Store di chiamare i servizi WCF..NET Framework 4.5 enables Windows Store applications to call WCF services.

Supporto WCF nelle applicazioni Windows StoreWCF Support in Windows Store Applications

Un subset di funzionalità WCF è disponibile in un'applicazione Windows Store. Per altre informazioni, vedere le sezioni seguenti.A subset of WCF functionality is available from within a Windows Store application, see the following sections for more details.

Importante

Usare le API di diffusione WinRT anziché quelle esposte da WCF.Use the WinRT syndication APIs instead of those exposed by WCF. Per altre informazioni, vedere API di diffusione WinRTFor more information see, WinRT Syndication API

Avviso

L'uso di Aggiungi riferimento al servizio per aggiungere il riferimento di un servizio Web a un componente Windows Runtime non è supportato.Using Add Service Reference to add a web service reference to a Windows Runtime Component isn’t supported.

Associazioni supportateSupported Bindings

Nelle applicazioni Windows Store sono supportate le associazioni WCF seguenti:The following WCF bindings are supported in Windows Store Applications:

  1. BasicHttpBinding

  2. NetTcpBinding

  3. NetHttpBinding

  4. CustomBinding

Nelle applicazioni Windows Store sono supportati gli elementi di associazione seguenti:The following binding elements are supported in Windows Store Applications

  1. BinaryMessageEncodingBindingElement

  2. TextMessageEncodingBindingElement

  3. ConnectionOrientedTransportBindingElement

  4. SslStreamSecurityBindingElement

  5. WindowsStreamSecurityBindingElement

  6. TcpTransportBindingElement

  7. HttpTransportBindingElement

  8. HttpsTransportBindingElement

  9. TransportSecurityBindingElement

Sono supportate sia la codifica testo sia quella binaria.Both Text and Binary encodings are supported. Inoltre, sono supportate tutte le modalità di trasferimento WCF.All WCF transfer modes are supported. Per altre informazioni, vedere Streaming Message Transfer.For more information see, Streaming Message Transfer.

Aggiungi riferimento al servizioAdd Service Reference

Per chiamare un servizio WCF da un'applicazione Windows Store, usare la funzionalità Aggiungi riferimento al servizio di Visual Studio 2012.To call a WCF service from a Windows Store application, use the Add Service Reference feature of Visual Studio 2012. Si noteranno alcune modifiche di tale funzionalità quando eseguita in un'applicazione Windows Store.You will notice a few changes in the functionality of Add Service Reference when done within a Windows Store application. Innanzitutto non viene generato alcun file di configurazione.First no configuration file is generated. Nelle applicazioni Windows Store non vengono usati i file di configurazione, pertanto devono essere configurati nel codice.Windows Store applications do not use configuration files, so they must be configured in code. Questo codice di configurazione è disponibile nel file References.cs generato da Aggiungi riferimento al servizio.This configuration code can be found in the References.cs file generated by Add Service Reference. Per visualizzare questo file, assicurarsi di selezionare "Mostra tutti i file" in Esplora soluzioni.To see this file, make sure to select "Show All Files" in the solution explorer. Il file si trova nei riferimenti al servizio, quindi nei nodi Reference.svcmap del progetto.The file will be located under the Service References and then Reference.svcmap nodes within the project. Tutte le operazioni generate per i servizi WCF in un'applicazione Windows Store saranno asincrone mediante il modello asincrono basato su attività.All operations generated for WCF services within a Windows Store application will be asynchronous using the Task-based asynchronous pattern. Per altre informazioni, vedere Modello asincrono basato su attività.For more information, see Task-based Asynchronous Pattern.

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.Because configuration is now generated in code, any changes made in the Reference.cs file would be overwritten every time the service reference is updated. Per risolvere questa situazione, il codice di configurazione viene generato all'interno di un metodo parziale, che è possibile implementare nella classe proxy del client.To remedy this situation the configuration code is generated within a partial method, which you can implement in your client proxy class. Il metodo parziale viene dichiarato come riportato di seguito:The partial method is declared as follows:

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:You can then implement this partial method and change the binding or endpoint in your client proxy class as follows:

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");  
            }  
        }  
    }  

SerializzazioneSerialization

Nelle applicazioni Windows Store sono supportati i serializzatori seguenti:The following serializers are supported in Windows Store applications:

  1. DataContractSerializerDataContractSerializer

  2. DataContractJsonSerializerDataContractJsonSerializer

  3. XmlSerializerXmlSerializer

Avviso

XmlDictionaryWriter.Write (DateTime) consente ora di scrivere un oggetto DateTime come stringa.XmlDictionaryWriter.Write(DateTime) now writes the DateTime object as a string.

SicurezzaSecurity

Nelle applicazioni Windows Store sono supportate le modalità di sicurezza seguenti:The following security modes are supported in Windows Store applications

  1. None

  2. Transport

  3. `System.ServiceModel.SecurityMode.TransportWithMessageCredentials`
  4. `System.ServiceModel.SecurityMode.TransportCredentialOnly`

Nelle applicazioni Windows Store sono supportati i tipi di credenziali client seguenti:The following client credential types are supported in Windows Store applications

  1. NoneNone

  2. BasicBasic

  3. DigestDigest

  4. NegotiateNegotiate

  5. NTLMNTLM

  6. WindowsWindows

  7. Username (sicurezza del messaggio)Username (Message Security)

  8. Windows (sicurezza del trasporto)Windows (Transport Security)

Per consentire alle applicazioni Windows Store di accedere e inviare le credenziali di Windows predefinite, è necessario abilitare questa funzionalità nel file Package.appmanifest.In order for Windows Store applications to access and send default Windows credentials, you must enable this functionality within the Package.appmanifest file. Aprire il file e selezionare la scheda delle funzionalità e selezionare "Predefinita delle credenziali di Windows".Open this file and select the Capabilities tab and select "Default Windows Credentials". In questo modo le applicazioni possono connettersi alle risorse Intranet che richiedono le credenziali del dominio.This allows the application to connect to intranet resources that require domain credentials.

Importante

Per consentire alle applicazioni di Windows Store effettuare chiamate tra computer è necessario attivare un'altra funzionalità denominata "Rete casa/lavoro".In order for Windows Store applications to make cross machine calls you must enable another capability called "Home/Work Networking". Anche questa impostazione è disponibile nella scheda delle funzionalità del file Package.appmanifest. Selezionare la casella di controllo Rete casa/lavoro.This setting is also in the Package.appmanifest file under the Capabilities tab. Select the Home/Work Networking checkbox. 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.This gives your application inbound and outbound access to the networks of the user’s trusted places like home and work. Le porte critiche in ingresso sono sempre bloccate.Inbound critical ports are always blocked. Per accedere ai servizi su Internet è inoltre necessario abilitare la funzionalità Internet (client).For accessing services on the internet you must also enable Internet (Client) capability.

VarieMisc

L'uso delle classi seguenti è supportato per le applicazioni Windows Store:The use of the following classes is supported for Windows Store Applications:

  1. ChannelFactory

  2. `System.ServiceModel.DuplexChannelFactory`
  3. CallbackBehaviorAttribute

Definizione dei contratti di servizioDefining Service Contracts

Si consiglia di definire solo operazioni del servizio asincrone mediante il modello asincrono basato su attività.We recommend only defining asynchronous service operations using the task-based async pattern. In questo modo viene garantita la risposta delle applicazioni Windows Store durante la chiamata a un'operazione del servizio.This ensures Windows Store applications remain responsive while calling a service operation.

Avviso

Sebbene non venga generata alcuna eccezione se si definisce un'operazione sincrona, è consigliabile definire solo le operazioni asincrone.While no exception will be thrown if you define a synchronous operation, it is strongly recommended to only define asynchronous operations.

Chiamata dei servizi WCF da applicazioni Windows StoreCalling WCF Services from Windows Store Applications

Come detto in precedenza, tutte le configurazioni devono essere eseguite nel codice nel metodo GetBindingForEndpoint della classe proxy generata.As mentioned before all configuration must be done in code in the GetBindingForEndpoint method in the generated proxy class. 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.Calling a service operation is done the same as calling any task-based asynchronous method as shown in the following code snippet.

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.Notice the use of the async keyword on the method making the asynchronous call and the await keyword when calling the asynchronous method.

Vedere ancheSee Also

WCF nel Blog di App Windows StoreWCF in Windows Store Apps Blog
Sicurezza e i client di Windows Store WCFWCF Windows Store Clients and Security
App di Windows Store e chiamate tra computerWindows Store Apps and Cross Machine Calls
La chiamata a un servizio WCF distribuito in Azure da un'applicazione Windows StoreCalling a WCF Service Deployed in Azure from a Windows Store App
Programmazione delle funzionalità di sicurezza di WCFProgramming WCF Security
AssociazioniBindings