Anvisningar: Ange en tjänstbindning i kod
I det här exemplet definieras ett ICalculator
kontrakt för en kalkylatortjänst, tjänsten implementeras i CalculatorService
klassen och sedan definieras dess slutpunkt i kod, där det anges att tjänsten måste använda BasicHttpBinding klassen.
Det är vanligtvis bästa praxis att ange bindnings- och adressinformationen deklarativt i konfigurationen snarare än att absolut i kod. Det är vanligtvis inte praktiskt att definiera slutpunkter i kod eftersom bindningar och adresser för en distribuerad tjänst vanligtvis skiljer sig från de som används när tjänsten utvecklas. Mer allmänt gör det möjligt för dem att ändra bindningen och adresseringsinformationen utan att behöva kompilera om eller distribuera om programmet.
En beskrivning av hur du konfigurerar den här tjänsten med hjälp av konfigurationselement i stället för kod finns i Så här anger du en tjänstbindning i konfigurationen.
Ange i kod att använda BasicHttpBinding för tjänsten
Definiera ett tjänstkontrakt för typen av tjänst.
[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
Implementera tjänstkontraktet i en tjänstklass.
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
I värdprogrammet skapar du basadressen för tjänsten och bindningen som ska användas med tjänsten.
// 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()
Skapa värden för tjänsten, lägg till slutpunkten och öppna sedan värden.
using(ServiceHost host = new ServiceHost(typeof(CalculatorService))) { host.AddServiceEndpoint(typeof(ICalculator),binding1, baseAddress); host.Open(); }
Using host As New ServiceHost(GetType(CalculatorService)) With host .AddServiceEndpoint(GetType(ICalculator), _ binding1, _ baseAddress) host.Open() End With End Using
Ändra standardvärdena för bindningsegenskaperna
Om du vill ändra ett av standardegenskapsvärdena för BasicHttpBinding klassen anger du egenskapsvärdet för bindningen till det nya värdet innan du skapar värden. Om du till exempel vill ändra standardvärdena för att öppna och stänga tidsgränser på 1 minut till 2 minuter använder du följande.
TimeSpan modifiedCloseTimeout = new TimeSpan(00, 02, 00); binding1.CloseTimeout = modifiedCloseTimeout;
Dim modifiedCloseTimeout As New TimeSpan(0, 2, 0) binding1.CloseTimeout = modifiedCloseTimeout