Gewusst wie: Erstellen eines Dienstendpunkts im Code
In diesem Beispiel wird ein ICalculator
-Vertrag für einen Rechnerdienst definiert, der Dienst wird in der CalculatorService
-Klasse implementiert und der Endpunkt wird im Code definiert. Dort ist angegeben, dass die BasicHttpBinding-Klasse vom Dienst verwendet werden muss.
Normalerweise ist es die bewährte Methode, die Bindung anzugeben und die Informationen deklarativ in der Konfiguration anzusprechen anstatt imperativ im Code. Die Definition von Endpunkten im Code ist normalerweise nicht geeignet, da sich die Bindungen und die Adressen eines bereitgestellten Diensts normalerweise von denen unterscheiden, die während der Entwicklung des Diensts verwendet wurden. Allgemeiner gesagt ermöglicht das Ausschließen der Bindung und der Adressierungsinformationen aus dem Code ihre Änderung, ohne die Anwendung neu kompilieren oder erneut bereitstellen zu müssen.
So erstellen Sie einen Dienstendpunkt im Code
Erstellen Sie die Schnittstelle, die den Dienstvertrag definiert.
<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
[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); }
Implementieren Sie den in Schritt 1 definierten Dienstvertrag.
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
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; } }
Erstellen Sie in der Hostanwendung eine Basisadresse für den Dienst und die Bindung, die für den Dienst verwendet werden soll.
' Specify a base address for the service Dim baseAddress = "https://localhost/CalculatorService" ' Create the binding to be used by the service. Dim binding1 As New BasicHttpBinding()
// Specify a base address for the service String baseAddress = "https://localhost/CalculatorService"; // Create the binding to be used by the service. BasicHttpBinding binding1 = new BasicHttpBinding();
Erstellen Sie den Host, und rufen Sie AddServiceEndpoint oder eine der anderen Überladungen auf, um den Dienstendpunkt dem Host hinzuzufügen.
Using host As New ServiceHost(GetType(CalculatorService)) With host .AddServiceEndpoint(GetType(ICalculator), _ binding1, _ baseAddress)
using(ServiceHost host = new ServiceHost(typeof(CalculatorService))) { host.AddServiceEndpoint(typeof(ICalculator),binding1, baseAddress);
Übergeben Sie beim Erstellen des ServiceHost die Basisadresse an den Konstruktor, und rufen Sie nicht AddServiceEndpoint auf, um die Bindung im Code anzugeben, aber dabei die Standardendpunkte der Runtime zu verwenden.
Dim host As New ServiceHost(GetType(CalculatorService), New Uri(baseAddress))
ServiceHost host = new ServiceHost(typeof(CalculatorService), new Uri(baseAddress));
Weitere Informationen über zu Standardendpunkten finden Sie unter Vereinfachte Konfiguration und Vereinfachte Konfiguration für WCF-Dienste.