OperationBehaviorAttribute.Impersonation Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene o imposta un valore che indica il livello di rappresentazione del chiamante supportato dall'operazione.
public:
property System::ServiceModel::ImpersonationOption Impersonation { System::ServiceModel::ImpersonationOption get(); void set(System::ServiceModel::ImpersonationOption value); };
public System.ServiceModel.ImpersonationOption Impersonation { get; set; }
member this.Impersonation : System.ServiceModel.ImpersonationOption with get, set
Public Property Impersonation As ImpersonationOption
Valore della proprietà
Uno dei valori di ImpersonationOption. Il valore predefinito è NotAllowed.
Esempio
Nell'esempio di codice seguente la rappresentazione viene richiesta impostando la proprietà Impersonation su Required.
using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(
Name="SampleHello",
Namespace="http://microsoft.wcf.documentation"
)]
public interface IHello
{
[OperationContract]
string Hello(string greeting);
}
public class HelloService : IHello
{
public HelloService()
{
Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
}
~HelloService()
{
Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
}
[OperationBehavior(Impersonation=ImpersonationOption.Required)]
public string Hello(string greeting)
{
Console.WriteLine("Called by: " + Thread.CurrentPrincipal.Identity.Name);
Console.WriteLine("IsAuthenticated: " + Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString());
Console.WriteLine("AuthenticationType: " + Thread.CurrentPrincipal.Identity.AuthenticationType.ToString());
Console.WriteLine("Caller sent: " + greeting);
Console.WriteLine("Sending back: Hi, " + Thread.CurrentPrincipal.Identity.Name);
return "Hi, " + Thread.CurrentPrincipal.Identity.Name;
}
}
}
Imports System.ServiceModel
Imports System.Threading
Namespace Microsoft.WCF.Documentation
<ServiceContract(Name:="SampleHello", Namespace:="http://microsoft.wcf.documentation")> _
Public Interface IHello
<OperationContract> _
Function Hello(ByVal greeting As String) As String
End Interface
Public Class HelloService
Implements IHello
Public Sub New()
Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
End Sub
Protected Overrides Sub Finalize()
Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
End Sub
<OperationBehavior(Impersonation:=ImpersonationOption.Required)> _
Public Function Hello(ByVal greeting As String) As String Implements IHello.Hello
Console.WriteLine("Called by: " & Thread.CurrentPrincipal.Identity.Name)
Console.WriteLine("IsAuthenticated: " & Thread.CurrentPrincipal.Identity.IsAuthenticated.ToString())
Console.WriteLine("AuthenticationType: " & Thread.CurrentPrincipal.Identity.AuthenticationType.ToString())
Console.WriteLine("Caller sent: " & greeting)
Console.WriteLine("Sending back: Hi, " & Thread.CurrentPrincipal.Identity.Name)
Return "Hi, " & Thread.CurrentPrincipal.Identity.Name
End Function
End Class
End Namespace
Nell'esempio di codice seguente viene illustrato l'utilizzo della proprietà ClientCredentials per impostare le credenziali dell'applicazione client prima di richiamare l'operazione che necessita di tali credenziali per la rappresentazione.
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Security.Principal;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
public class Client
{
public void Run()
{
// Picks up configuration from the config file.
SampleHelloClient wcfClient = new SampleHelloClient();
try
{
// Set the client credentials to permit impersonation. You can do this programmatically or in the configuration file.
wcfClient.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
// Make calls using the proxy.
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Enter a greeting to send and press ENTER: ");
Console.Write(">>> ");
Console.ForegroundColor = ConsoleColor.Green;
string greeting = Console.ReadLine();
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Called service with: \r\n\t" + greeting);
Console.WriteLine("Service returned: " + wcfClient.Hello(greeting));
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("Press ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("ENTER");
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write(" to exit...");
Console.ReadLine();
wcfClient.Close();
}
catch (TimeoutException timeProblem)
{
Console.WriteLine("The service operation timed out. " + timeProblem.Message);
wcfClient.Abort();
Console.Read();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
wcfClient.Abort();
Console.Read();
}
}
public static void Main()
{
Client client = new Client();
client.Run();
}
}
}
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Security.Principal
Imports System.Threading
Namespace Microsoft.WCF.Documentation
Public Class Client
Public Sub Run()
' Picks up configuration from the config file.
Dim wcfClient As New SampleHelloClient()
Try
' Set the client credentials to permit impersonation. You can do this programmatically or in the configuration file.
wcfClient.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation
' Make calls using the proxy.
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Enter a greeting to send and press ENTER: ")
Console.Write(">>> ")
Console.ForegroundColor = ConsoleColor.Green
Dim greeting = Console.ReadLine()
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Called service with: " & vbCrLf & vbTab & greeting)
Console.WriteLine("Service returned: " & wcfClient.Hello(greeting))
Console.ForegroundColor = ConsoleColor.Blue
Console.Write("Press ")
Console.ForegroundColor = ConsoleColor.Red
Console.Write("ENTER")
Console.ForegroundColor = ConsoleColor.Blue
Console.Write(" to exit...")
Console.ReadLine()
wcfClient.Close()
Catch timeProblem As TimeoutException
Console.WriteLine("The service operation timed out. " & timeProblem.Message)
wcfClient.Abort()
Console.Read()
Catch commProblem As CommunicationException
Console.WriteLine("There was a communication problem. " & commProblem.Message)
wcfClient.Abort()
Console.Read()
End Try
End Sub
Public Shared Sub Main()
Dim client As New Client()
client.Run()
End Sub
End Class
End Namespace
Commenti
Utilizzare la proprietà Impersonation (insieme con una configurazione di associazione che supporta la rappresentazione) per consentire a metodi specificati (quelli contrassegnati con la proprietà Impersonation impostata su Allowed o Required) l'esecuzione con l'identità del chiamante. Per informazioni dettagliate, incluso il modo in cui viene eseguita la rappresentazione quando si usa Allowed insieme alla ServiceAuthorizationBehavior.ImpersonateCallerForAllOperations proprietà, vedere Delega e rappresentazione e Procedura: Rappresentazione di un client in un servizio.
Nota
Quando si aggiunge a livello di codice un endpoint di servizio che esegue la rappresentazione, è necessario utilizzare uno dei metodi AddServiceEndpoint o il metodo ContractDescription.GetContract per caricare correttamente il contratto in un nuovo oggetto System.ServiceModel.Description.ServiceDescription. Se si utilizza un file di configurazione, non sono necessari passaggi aggiuntivi.
In alcuni scenari specifici la rappresentazione non è supportata. Per altre informazioni, vedere Scenari non supportati.