Проверка работы службы

  1. Запустите консольное приложение GettingStartedHost из Visual Studio 2012. В Windows Vista и более поздних операционных системах служба должна запускаться пользователем с правами администратора. Так как Visual Studio была запущена пользователем с правами администратора, GettingStartedHost также запускается пользователем с правами администратора. Вы также можете запустить новую командную строку с правами администратора, а затем в ней запустить service.exe.
  2. Откройте Internet Explorer и перейдите на страницу отладки службы по адресу. http://localhost:8000/GettingStarted/

Пример

Нижеприведенный пример иллюстрирует создание контракта службы и ее реализацию (см. предыдущие шаги в руководстве), а также размещение службы в консольном приложении.

Для компиляции с помощью компилятора командной строки скомпилируйте IService1.cs и Service2.cs в библиотеку классов, ссылающуюся на System.ServiceModel.dll. и скомпилируйте Program.cs в консольное приложение.

// IService1.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

namespace GettingStartedLib

{

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]

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);

}

}

// Service1.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

namespace GettingStartedLib

{

public class CalculatorService: ICalculator

{

public double Add(double n1, double n2)

{

double result = n1 + n2;

Console.WriteLine("Received Add({0},{1})", n1, n2);

// Code added to write output to the console window.

Console.WriteLine("Return: {0}", result);

return result;

}

public double Subtract(double n1, double n2)

{

double result = n1 - n2;

Console.WriteLine("Received Subtract({0},{1})", n1, n2);

Console.WriteLine("Return: {0}", result);

return result;

}

public double Multiply(double n1, double n2)

{

double result = n1 * n2;

Console.WriteLine("Received Multiply({0},{1})", n1, n2);

Console.WriteLine("Return: {0}", result);

return result;

}

public double Divide(double n1, double n2)

{

double result = n1 / n2;

Console.WriteLine("Received Divide({0},{1})", n1, n2);

Console.WriteLine("Return: {0}", result);

return result;

}

}

}

//Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.ServiceModel;

using GettingStartedLib;

using System.ServiceModel.Description;

namespace GettingStartedHost

{

class Program

{

static void Main(string[] args)

{

// Step 1 of the address configuration procedure: Create a URI to serve as the base address.

Uri baseAddress = new Uri("http://localhost:8000/ServiceModelSamples/Service");

// Step 2 of the hosting procedure: Create ServiceHost

ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);

try

{

// Step 3 of the hosting procedure: Add a service endpoint.

selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");

// Step 4 of the hosting procedure: Enable metadata exchange.

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();

smb.HttpGetEnabled = true;

selfHost.Description.Behaviors.Add(smb);

// Step 5 of the hosting procedure: Start (and then stop) the service.

selfHost.Open();

Console.WriteLine("The service is ready.");

Console.WriteLine("Press <ENTER> to terminate service.");

Console.WriteLine();

Console.ReadLine();

// Close the ServiceHostBase to shutdown the service.

selfHost.Close();

}

catch (CommunicationException ce)

{

Console.WriteLine("An exception occurred: {0}", ce.Message);

selfHost.Abort();

}

}

}

}

‘IService1.vb

Imports System

Imports System.ServiceModel

Namespace GettingStartedLib

<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _

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

End Namespace

‘Service1.vb

Imports System

Imports System.ServiceModel

Namespace GettingStartedLib

Public Class CalculatorService

Implements ICalculator

Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add

Dim result As Double = n1 + n2

' Code added to write output to the console window.

Console.WriteLine("Received Add({0},{1})", n1, n2)

Console.WriteLine("Return: {0}", result)

Return result

End Function

Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract

Dim result As Double = n1 - n2

Console.WriteLine("Received Subtract({0},{1})", n1, n2)

Console.WriteLine("Return: {0}", result)

Return result

End Function

Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply

Dim result As Double = n1 * n2

Console.WriteLine("Received Multiply({0},{1})", n1, n2)

Console.WriteLine("Return: {0}", result)

Return result

End Function

Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide

Dim result As Double = n1 / n2

Console.WriteLine("Received Divide({0},{1})", n1, n2)

Console.WriteLine("Return: {0}", result)

Return result

End Function

End Class

End Namespace

‘Module1.vb

Imports System

Imports System.ServiceModel

Imports System.ServiceModel.Description

Imports GettingStartedLibVB.GettingStartedLib

Module Service

Class Program

Shared Sub Main()

' Step 1 of the address configuration procedure: Create a URI to serve as the base address.

Dim baseAddress As New Uri("http://localhost:8000/ServiceModelSamples/Service")

' Step 2 of the hosting procedure: Create ServiceHost

Dim selfHost As New ServiceHost(GetType(CalculatorService), baseAddress)

Try

' Step 3 of the hosting procedure: Add a service endpoint.

' Add a service endpoint

selfHost.AddServiceEndpoint(_

GetType(ICalculator), _

New WSHttpBinding(), _

"CalculatorService")

' Step 4 of the hosting procedure: Enable metadata exchange.

' Enable metadata exchange

Dim smb As New ServiceMetadataBehavior()

smb.HttpGetEnabled = True

selfHost.Description.Behaviors.Add(smb)

' Step 5 of the hosting procedure: Start (and then stop) the service.

selfHost.Open()

Console.WriteLine("The service is ready.")

Console.WriteLine("Press <ENTER> to terminate service.")

Console.WriteLine()

Console.ReadLine()

' Close the ServiceHostBase to shutdown the service.

selfHost.Close()

Catch ce As CommunicationException

Console.WriteLine("An exception occurred: {0}", ce.Message)

selfHost.Abort()

End Try

End Sub

End Class

End Module

Примечание
Подобные службы требуют разрешения на регистрацию на компьютере HTTP-адресов, на которые будет ожидаться передача данных. Учетные записи с уровнем доступа администратора имеют данное разрешение, а остальным учетным записям должно быть предоставлено разрешение на использование пространства имен HTTP. Дополнительные сведения о настройке резервирования пространства имен см. в разделе Настройка HTTP и HTTPS. Запуск файла service.exe на Visual Studio возможен только при наличии прав администратора.

Сейчас служба запущена.Перейти к Как создать клиент Windows Communication Foundation.Сведения по устранению неполадок см. в разделе Устранение неполадок, связанных с учебником по началу работы.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: