Procedura: impostare le intestazioni nella richiesta del client (WCF Data Services)How to: Set Headers in the Client Request (WCF Data Services)

Quando si usa libreria client di WCF Data ServicesWCF Data Services per accedere a un servizio dati che supporta Protocollo OData (Open Data)Open Data Protocol (OData), la libreria client imposta automaticamente le intestazioni HTTP richieste nei messaggi di richiesta inviati al servizio dati.When you use the WCF Data ServicesWCF Data Services client library to access a data service that supports the Protocollo OData (Open Data)Open Data Protocol (OData), the client library automatically sets the required HTTP headers in request messages sent to the data service. 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.However, the client library does not know to set message headers that are required in certain cases, such as when the data service requires claims-based authentication or cookies. Per ulteriori informazioni, vedere protezione di WCF Data Services.For more information, see Securing WCF Data Services. In questi casi, è necessario impostare manualmente le intestazioni nel messaggio di richiesta prima che venga inviato.In these cases, you must manually set message headers in the request message before it is sent. 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.The example in this topic shows how to handle the SendingRequest event to add a new header to the request message before it is sent to the data service.

Nell'esempio riportato in questo argomento vengono usati il servizio dati Northwind di esempio e le classi del servizio dati client generate automaticamente.The example in this topic uses the Northwind sample data service and autogenerated client data service classes. Questo servizio e le classi di dati client vengono create quando si completa la Guida rapida di WCF Data Services.This service and the client data classes are created when you complete the WCF Data Services quickstart. È inoltre possibile utilizzare il servizio dati Northwind di esempio pubblicato sul ODataOData sito Web, dati di esempio servizio è di sola lettura e il tentativo di salvare le modifiche restituisce un errore.You can also use the Northwind sample data service that is published on the ODataOData Web site; this sample data service is read-only and attempting to save changes returns an error. Servizi dati di esempio di ODataOData sito Web consente l'autenticazione anonima.The sample data services on the ODataOData Web site allow anonymous authentication.

EsempioExample

Nell'esempio seguente viene registrato un gestore per l'evento SendingRequest, quindi viene eseguita una query sul servizio dati.The following example registers a handler for the SendingRequest event and then executes a query against the data service.

Nota

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.When a data service requires you to manually set the message header for every request, consider registering the handler for the SendingRequest event by overriding the OnContextCreated partial method in the entity container that represents the data service, which in this case is NorthwindEntities.

// 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);
}
' 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}" & vbNewLine & "Address:" & vbNewLine & "{1}" _
                          & vbNewLine & "{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

EsempioExample

Nel metodo seguente viene gestito l'evento SendingRequest e viene aggiunta un'intestazione di autenticazione alla richiesta.The following method handles the SendingRequest event and adds an Authentication header to the request.

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

Vedere ancheSee Also

Protezione di WCF Data ServicesSecuring WCF Data Services
Libreria client WCF Data ServicesWCF Data Services Client Library