Procedure: Een service-eindpunt maken in code
In dit voorbeeld wordt een ICalculator
contract gedefinieerd voor een rekenmachineservice, wordt de service geïmplementeerd in de CalculatorService
klasse en wordt het eindpunt vervolgens gedefinieerd in code, waarbij wordt opgegeven dat de service de BasicHttpBinding klasse moet gebruiken.
Het is meestal de aanbevolen procedure om de bindings- en adresgegevens declaratief op te geven in de configuratie in plaats van imperatief in code. Het definiëren van eindpunten in code is meestal niet praktisch omdat de bindingen en adressen voor een geïmplementeerde service doorgaans afwijken van de bindingen en adressen die worden gebruikt terwijl de service wordt ontwikkeld. Over het algemeen kunnen ze de bindings- en adresseringsgegevens buiten de code houden zonder de toepassing opnieuw te hoeven compileren of opnieuw te implementeren.
Een service-eindpunt maken in code
Maak de interface waarmee het servicecontract wordt gedefinieerd.
[ServiceContract] public interface ICalculator { [OperationContract] double Add(double n1, double n2); [OperationContract] double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2); }
<ServiceContract()> _ Public Interface ICalculator <OperationContract()> _ Function Add(ByVal n1 As Double, _ ByVal n2 As Double) As Double <OperationContract()> _ Function Subtract(ByVal n1 As Double, ByVal _ n2 As Double) As Double <OperationContract()> _ Function Multiply(ByVal n1 As Double, _ ByVal n2 As Double) As Double <OperationContract()> _ Function Divide(ByVal n1 As Double, _ ByVal n2 As Double) As Double End Interface
Implementeer het servicecontract dat is gedefinieerd in stap 1.
public class CalculatorService : ICalculator { public double Add(double n1, double n2) { return n1 + n2; } public double Subtract(double n1, double n2) { return n1 - n2; } public double Multiply(double n1, double n2) { return n1 * n2; } public double Divide(double n1, double n2) { return n1 / n2; } }
Public Class CalculatorService Implements ICalculator Public Function Add(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements ICalculator.Add Return n1 + n2 End Function Public Function Subtract(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements ICalculator.Subtract Return n1 - n2 End Function Public Function Multiply(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements ICalculator.Multiply Return n1 * n2 End Function Public Function Divide(ByVal n1 As Double, _ ByVal n2 As Double) As Double Implements ICalculator.Divide Return n1 / n2 End Function End Class
Maak in de hostingtoepassing het basisadres voor de service en de binding die moet worden gebruikt met de service.
// Specify a base address for the service String baseAddress = "http://localhost/CalculatorService"; // Create the binding to be used by the service. BasicHttpBinding binding1 = new BasicHttpBinding();
' Specify a base address for the service Dim baseAddress = "http://localhost/CalculatorService" ' Create the binding to be used by the service. Dim binding1 As New BasicHttpBinding()
Maak de host en roep ServiceHost.AddServiceEndpoint(Type, Binding, String) een van de andere overbelastingen aan om het service-eindpunt voor de host toe te voegen.
using(ServiceHost host = new ServiceHost(typeof(CalculatorService))) { host.AddServiceEndpoint(typeof(ICalculator),binding1, baseAddress);
Using host As New ServiceHost(GetType(CalculatorService)) With host .AddServiceEndpoint(GetType(ICalculator), _ binding1, _ baseAddress)
Als u de binding in code wilt opgeven, maar de standaardeindpunten wilt gebruiken die door de runtime worden geleverd, geeft u het basisadres door aan de constructor wanneer u de ServiceHostconstructor maakt en roept u deze niet aan ServiceHost.AddServiceEndpoint.
ServiceHost host = new ServiceHost(typeof(CalculatorService), new Uri(baseAddress));
Dim host As New ServiceHost(GetType(CalculatorService), New Uri(baseAddress))
Zie Vereenvoudigde configuratie en vereenvoudigde configuratie voor WCF-services voor meer informatie over standaardeindpunten.