Procédure : définir des en-têtes dans la demande cliente (WCF Data Services)
Lorsque vous utilisez la bibliothèque cliente Services de données WCF pour accéder à un service de données qui prend en charge Protocole OData (Open Data), celle-ci définit automatiquement les en-têtes HTTP requis dans les messages de demande transmis au service de données. Toutefois, la bibliothèque cliente ne sait pas définir les en-têtes de message requis dans certains cas, par exemple, quand le service de données exige une authentification basée sur des revendication ou des cookies. Pour plus d'informations, consultez Securing WCF Data Services. Dans ces cas, vous devez définir manuellement les en-têtes dans le message de demande avant de le transmettre. L'exemple de cette rubrique illustre comment utiliser l'événement SendingRequest pour ajouter un nouvel en-tête au message de demande avant qu'il ne soit envoyé au service de données.
L'exemple dans cette rubrique utilise l'exemple de service de données Northwind et des classes de service de données clientes générées automatiquement. Ce service et les classes de données clientes sont créés lorsque vous complétez le démarrage rapide WCF Data Services. Vous pouvez également utiliser l'exemple de service de données Northwind publié sur le site Web OData ; cet exemple de service de données est en lecture seule et retourne une erreur si vous tentez d'enregistrer les modifications apportées. Les exemples de services de données sur le site Web OData autorisent l'authentification anonyme.
Exemple
L'exemple suivant enregistre un gestionnaire pour l'événement SendingRequest, puis exécute une requête sur le service de données.
Notes
Lorsqu'un service de données exige que vous définissiez manuellement l'en-tête de message de chaque demande, considérez d'utiliser un gestionnaire pour l'événement SendingRequest en remplaçant la méthode OnContextCreated partielle dans le conteneur d'entités qui représente le service de données, dans ce cas : 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}" & 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
// 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);
}
La méthode suivante utilise l'événement SendingRequest et ajoute un en-tête automatique à la demande.
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\"");
}
Voir aussi
Concepts
Sécurisation de WCF Data Services