Nasıl yapılır: Kodda Hizmet Bağlama Belirtme
Bu örnekte, bir hesap makinesi hizmeti için bir ICalculator
sözleşme tanımlanır, hizmet sınıfında uygulanır CalculatorService
ve ardından uç noktası kodda tanımlanır ve burada hizmetin sınıfı kullanması BasicHttpBinding gerektiği belirtilir.
Bağlama ve adres bilgilerini kodda kesinlik temelli olarak değil, yapılandırmada bildirim temelli olarak belirtmek genellikle en iyi yöntemdir. Dağıtılan bir hizmetin bağlamaları ve adresleri genellikle hizmet geliştirilirken kullanılanlardan farklı olduğundan, kodda uç noktaları tanımlamak genellikle pratik değildir. Daha genel olarak bağlama ve adresleme bilgilerinin kod dışında tutulması, uygulamanın yeniden derlenmesine veya yeniden dağıtılmasına gerek kalmadan bunların değişmesine olanak tanır.
Bu hizmetin kod yerine yapılandırma öğelerini kullanarak nasıl yapılandırılacağının açıklaması için bkz . Nasıl yapılır: Yapılandırmada Hizmet Bağlaması Belirtme.
Hizmet için TemelHttpBinding'i kullanmak üzere kodda belirtmek için
Hizmet türü için bir hizmet sözleşmesi tanımlayın.
[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
Hizmet sözleşmesini bir hizmet sınıfında uygulayın.
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
Barındırma uygulamasında hizmetin temel adresini ve hizmetle kullanılacak bağlamayı oluşturun.
// 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()
Hizmet için konağı oluşturun, uç noktayı ekleyin ve ardından konağı açın.
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
Bağlama özelliklerinin varsayılan değerlerini değiştirmek için
Sınıfının varsayılan özellik değerlerinden BasicHttpBinding birini değiştirmek için, konağı oluşturmadan önce bağlamadaki özellik değerini yeni değere ayarlayın. Örneğin, 1 dakikalık varsayılan açık ve kapalı zaman aşımı değerlerini 2 dakika olarak değiştirmek için aşağıdakileri kullanın.
TimeSpan modifiedCloseTimeout = new TimeSpan(00, 02, 00); binding1.CloseTimeout = modifiedCloseTimeout;
Dim modifiedCloseTimeout As New TimeSpan(0, 2, 0) binding1.CloseTimeout = modifiedCloseTimeout