Condividi tramite


Procedura: impostare le intestazioni nella richiesta del client (WCF Data Services)

Quando si utilizza libreria client di WCF Data Services per accedere a un servizio dati che supporta OData (Open Data Protocol) , la libreria client imposta automaticamente le intestazioni HTTP richieste nei messaggi di richiesta inviati al servizio dati. Tuttavia, tramite la libreria client non vengono impostate le intestazioni del messaggio richieste in determinati casi, ad esempio quando il servizio dati richiede l'autenticazione basata sulle attestazioni o i cookie. Per ulteriori informazioni, vedere Securing WCF Data Services. In questi casi, è necessario impostare manualmente le intestazioni nel messaggio di richiesta prima che venga inviato. L'esempio in questo argomento illustra come gestire l'evento SendingRequest per aggiungere una nuova intestazione al messaggio di richiesta prima che venga inviato al servizio dati.

Nell'esempio riportato in questo argomento vengono utilizzati il servizio dati Northwind di esempio e le classi del servizio dati client generate automaticamente. Questo servizio e le classi di dati client vengono creati al completamento della Guida rapida di WCF Data Services. È anche possibile utilizzare il servizio dati di esempio di Northwind pubblicato sul sito Web OData . Questo servizio dati di esempio è di sola lettura e viene restituito un errore se si tenta di salvare le modifiche. I servizi dati di esempio del sito Web OData  permettono l'autenticazione anonima.

Esempio

Nell'esempio seguente viene registrato un gestore per l'evento SendingRequest, quindi viene eseguita una query sul servizio dati.

Gg258441.note(it-it,VS.100).gifNota:
Quando un servizio dati richiede che l'intestazione del messaggio venga impostata manualmente per ogni richiesta, considerare registrare il gestore per l'evento SendingRequest eseguendo l'override del metodo parziale OnContextCreated nel contenitore di entità che rappresenta il servizio dati che in questo caso è NorthwindEntities.

' Create the DataServiceContext using the service URI.
Dim context As NorthwindEntities = New NorthwindEntities(svcUri)

' Register to handle the SendingRequest event.
' Note: If this must be done for every request to the data service, consider
' registering for this event by overriding the OnContextCreated partial method in 
' the entity container, in this case NorthwindEntities. 
AddHandler context.SendingRequest, AddressOf OnSendingRequest

' Define a query for orders with a Freight value greater than 30.
Dim query = From cust In context.Customers _
    Where cust.Country = "Germany" _
    Select cust

Try
    ' Enumerate to execute the query.
    For Each cust As Customer In query
        Console.WriteLine("Name: {0}\nAddress:\n{1}\n{2}, {3}", _
            cust.CompanyName, cust.Address, cust.City, cust.Region)
    Next        
Catch ex As DataServiceQueryException
    Throw New ApplicationException( _
        "An error occurred during query execution.", ex)
End Try
// Create the DataServiceContext using the service URI.
NorthwindEntities context = new NorthwindEntities(svcUri);

// Register to handle the SendingRequest event.
// Note: If this must be done for every request to the data service, consider
// registering for this event by overriding the OnContextCreated partial method in 
// the entity container, in this case NorthwindEntities. 
context.SendingRequest += new EventHandler<SendingRequestEventArgs>(OnSendingRequest);

// Define a query for orders with a Freight value greater than 30.
var query = from cust in context.Customers
    where cust.Country == "Germany"
    select cust;

try
{
    // Enumerate to execute the query.
    foreach (Customer cust in query)
    {
        Console.WriteLine("Name: {0}\nAddress:\n{1}\n{2}, {3}",
            cust.CompanyName, cust.Address, cust.City, cust.Region);
    }
}
catch (DataServiceQueryException ex)
{
    throw new ApplicationException(
        "An error occurred during query execution.", ex);
}

Nel metodo seguente viene gestito l'evento SendingRequest e viene aggiunta un'intestazione di autenticazione alla richiesta.

Private Shared Sub OnSendingRequest(ByVal sender As Object, ByVal e As SendingRequestEventArgs)
    ' Add an Authorization header that contains an OAuth WRAP access token to the request.
    e.RequestHeaders.Add("Authorization", "WRAP access_token=""123456789""")
End Sub
private static void OnSendingRequest(object sender, SendingRequestEventArgs e)
{
    // Add an Authorization header that contains an OAuth WRAP access token to the request.
    e.RequestHeaders.Add("Authorization", "WRAP access_token=\"123456789\"");
}

Vedere anche

Concetti

Protezione di WCF Data Services

Altre risorse

Libreria client WCF Data Services