Procedura: creare un contratto unidirezionale
In questo argomento vengono illustrati i passaggi di base per creare metodi che utilizzano un contratto unidirezionale. Tali metodi richiamano operazioni su un servizio Windows Communication Foundation (WCF) da un client, ma non prevedono una risposta. Questo tipo di contratto può essere utilizzato, ad esempio, per pubblicare notifiche a numerosi sottoscrittori. È anche possibile utilizzare contratti unidirezionali durante la creazione di un contratto duplex (bidirezionale) che consente ai client e ai server di comunicare fra loro indipendentemente in modo che uno sia in grado di avviare chiamate all'altro. In particolare, questo può consentire al server di eseguire chiamate unidirezionali al client che vengono trattate da quest'ultimo come eventi. Per informazioni dettagliate sulla specifica di metodi bidirezionali, vedere la proprietà IsOneWay e la classe OperationContractAttribute.
Per altre informazioni sulla creazione di un'applicazione client per un contratto duplex, vedere Procedura: Accedere ai servizi con un contratto unidirezionale o request/reply. Per un esempio funzionante, vedere l'esempio Unidirezionale.
Per creare un contratto unidirezionale
Creare il contratto di servizio applicando la classe ServiceContractAttribute all'interfaccia e che definisce i metodi del servizio da implementare.
Indicare quali metodi nell'interfaccia possono essere chiamati da un client applicando loro la classe OperationContractAttribute.
Designare operazioni che non devono avere output (nessun valore restituito e nessun parametro out o ref) di tipo unidirezionale impostando la proprietà IsOneWay su
true
. Notare che le operazioni che contengono la classe OperationContractAttribute soddisfano per impostazione predefinita un contratto request/reply perché la proprietà IsOneWay èfalse
per impostazione predefinita. Pertanto, se si desidera un contratto unidirezionale per il metodo, è necessario specificare in modo esplicito il valore della proprietà dell'attributo in modo che siatrue
.
Esempio
Nell'esempio di codice seguente viene definito un contratto per un servizio che include alcuni metodi unidirezionali. Tutti i metodi contengono contratti unidirezionali eccetto Equals
la cui impostazione predefinita è request/reply e restituisce un risultato.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
[OperationContract(IsOneWay=true)]
void Clear();
[OperationContract(IsOneWay = true)]
void AddTo(double n);
[OperationContract(IsOneWay = true)]
void SubtractFrom(double n);
[OperationContract(IsOneWay = true)]
void MultiplyBy(double n);
[OperationContract(IsOneWay = true)]
void DivideBy(double n);
[OperationContract]
double Equals();
}
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples", SessionMode:=SessionMode.Required)> _
Public Interface ICalculatorSession
<OperationContract(IsOneWay:=True)> _
Sub Clear()
<OperationContract(IsOneWay:=True)> _
Sub AddTo(ByVal n As Double)
<OperationContract(IsOneWay:=True)> _
Sub SubtractFrom(ByVal n As Double)
<OperationContract(IsOneWay:=True)> _
Sub MultiplyBy(ByVal n As Double)
<OperationContract(IsOneWay:=True)> _
Sub DivideBy(ByVal n As Double)
<OperationContract()> _
Function Equal() As Double
End Interface