Como: especificar uma associação de serviço no código
Neste exemplo, um contrato ICalculator
é definido para um serviço de calculadora, o serviço é implementado na classe CalculatorService
e, em seguida, seu ponto de extremidade é definido no código, onde é especificado que o serviço deve usar a classe BasicHttpBinding.
Geralmente, a melhor prática é especificar as informações de associação e endereço declarativamente na configuração, em vez de imperativamente no código. A definição de pontos de extremidade no código não costuma ser prática, porque as associações e os endereços de um serviço implantado normalmente são diferentes daqueles usados conforme o serviço está sendo desenvolvido. De forma geral, manter as informações de endereçamento e associação fora de códigos permite a alteração sem a necessidade de compilar ou implantar novamente o aplicativo.
Para obter uma descrição de como configurar esse serviço usando elementos de configuração em vez de código, consulte Como especificar uma associação de serviço na configuração.
Para especificar no código para usar o BasicHttpBinding para o serviço
Defina um contrato de serviço para o tipo de serviço.
[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
Implemente o contrato de serviço em uma classe de serviço.
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
No aplicativo de hospedagem, crie o endereço base para o serviço e a associação a ser usada com o serviço.
// 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()
Crie o host para o serviço, adicione o ponto de extremidade e abra o host.
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
Para modificar os valores padrão das propriedades de associação
Para modificar um dos valores de propriedade padrão da classe BasicHttpBinding, defina o valor da propriedade na associação ao novo valor antes de criar o host. Por exemplo, para alterar os valores de tempo limite padrão abertos e fechados de 1 minuto para 2 minutos, use o seguinte.
TimeSpan modifiedCloseTimeout = new TimeSpan(00, 02, 00); binding1.CloseTimeout = modifiedCloseTimeout;
Dim modifiedCloseTimeout As New TimeSpan(0, 2, 0) binding1.CloseTimeout = modifiedCloseTimeout