Практическое руководство. Создание конечной точки службы в коде
В этом примере контракт ICalculator
определен для службы калькулятора, служба реализуется в классе CalculatorService
, а затем ее конечная точка задается в коде с указанием того, что служба должна использовать класс BasicHttpBinding.
В большинстве случаев рекомендуется указывать привязку и адрес декларативно в конфигурации, а не принудительно в коде. Как правило, определять конечные точки в коде непрактично, поскольку привязки и адреса для развернутой службы чаще всего отличаются от привязок и адресов, используемых в процессе разработки службы. В общем случае, если не указывать привязку и адрес в коде, их можно изменять без повторной компиляции или повторного развертывания приложения.
Создание конечной точки службы в коде
Создайте интерфейс, определяющий контракт службы.
[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
Реализуйте контракт службы, определенный на шаге 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
В ведущем приложении создайте базовый адрес для службы и привязку, которая используется со службой.
// 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()
Создайте основное приложение и вызовите ServiceHost.AddServiceEndpoint(Type, Binding, String) или одну из других перегрузок, чтобы добавить конечную точку службы для основного приложения.
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)
Чтобы указать привязку в коде, но использовать конечные точки по умолчанию, предоставляемые средой выполнения, передайте базовый адрес в конструктор при создании ServiceHostи не вызывайте ServiceHost.AddServiceEndpoint.
ServiceHost host = new ServiceHost(typeof(CalculatorService), new Uri(baseAddress));
Dim host As New ServiceHost(GetType(CalculatorService), New Uri(baseAddress))
Дополнительные сведения о конечных точках по умолчанию см. в разделе "Упрощенная конфигурация" и "Упрощенная конфигурация" для служб WCF.