Útmutató: WCF-szolgáltatás üzemeltetése felügyelt alkalmazásban
Ha egy felügyelt alkalmazáson belül szeretne szolgáltatást üzemeltetni, ágyazza be a szolgáltatás kódját a felügyelt alkalmazás kódjába, definiáljon egy végpontot a szolgáltatáshoz vagy imperatívan kódban, deklaratív módon konfigurációval, vagy alapértelmezett végpontok használatával, majd hozzon létre egy példányt ServiceHost.
Az üzenetek fogadásának megkezdéséhez hívja fel a következőt OpenServiceHost: . Ezzel létrehozza és megnyitja a szolgáltatás figyelőit. A szolgáltatás ily módon történő üzemeltetését gyakran "önkiszolgálónak" is nevezik, mivel a felügyelt alkalmazás maga végzi az üzemeltetést. A szolgáltatás bezárásához hívja fel a következőt CommunicationObject.CloseServiceHost: .
Egy szolgáltatás üzemeltethető felügyelt Windows-szolgáltatásban, az Internet Information Servicesben (IIS) vagy a Windows Folyamataktiválási szolgáltatásban (WAS). A szolgáltatás üzemeltetési lehetőségeiről további információt a Hosting Services című témakörben talál.
A felügyelt alkalmazásokban a szolgáltatás üzemeltetése a legrugalmasabb megoldás, mivel a legkisebb infrastruktúrát kell üzembe helyeznie. A felügyelt alkalmazások szolgáltatásainak üzemeltetéséről további információt a Felügyelt alkalmazásokban való üzemeltetés című témakörben talál.
Az alábbi eljárás bemutatja, hogyan implementálhat egy saját üzemeltetésű szolgáltatást egy konzolalkalmazásban.
Saját üzemeltetésű szolgáltatás létrehozása
Hozzon létre egy új konzolalkalmazást:
Nyissa meg a Visual Studiót, és válassza az Új>projekt lehetőséget a Fájl menüben.
A Telepített sablonok listában válassza a Visual C# vagy a Visual Basic, majd a Windows Desktop lehetőséget.
Válassza ki a Konzolalkalmazás sablont. Írja be
SelfHost
a Név mezőbe, majd kattintson az OK gombra.
Kattintson a jobb gombbal a SelfHost elemre Megoldáskezelő, és válassza a Hivatkozás hozzáadása lehetőséget. Válassza a System.ServiceModel elemet a .NET lapon, majd kattintson az OK gombra.
Tipp.
Ha a Megoldáskezelő ablak nem látható, válassza Megoldáskezelőa Nézet menüből.
Kattintson duplán Program.cs vagy Module1.vbMegoldáskezelő a kódablakban való megnyitásához, ha még nincs megnyitva. Adja hozzá a következő utasításokat a fájl tetején:
using System.ServiceModel; using System.ServiceModel.Description;
Imports System.ServiceModel Imports System.ServiceModel.Description
Szolgáltatási szerződés definiálása és megvalósítása. Ez a példa egy
HelloWorldService
olyan üzenetet határoz meg, amely a szolgáltatás bemenete alapján ad vissza egy üzenetet.[ServiceContract] public interface IHelloWorldService { [OperationContract] string SayHello(string name); } public class HelloWorldService : IHelloWorldService { public string SayHello(string name) { return string.Format("Hello, {0}", name); } }
<ServiceContract()> Public Interface IHelloWorldService <OperationContract()> Function SayHello(ByVal name As String) As String End Interface Public Class HelloWorldService Implements IHelloWorldService Public Function SayHello(ByVal name As String) As String Implements IHelloWorldService.SayHello Return String.Format("Hello, {0}", name) End Function End Class
Feljegyzés
A szolgáltatási felület meghatározásával és implementálásával kapcsolatos további információkért lásd : Hogyan: Szolgáltatásszerződés definiálása és hogyan: Szolgáltatásszerződés megvalósítása.
A metódus tetején
Main
hozza létre az Uri osztály egy példányát a szolgáltatás alapcímével.Uri baseAddress = new Uri("http://localhost:8080/hello");
Dim baseAddress As Uri = New Uri("http://localhost:8080/hello")
Hozzon létre egy példányt az ServiceHost osztályból, amely a Type szolgáltatástípust és az egységes erőforrás-azonosító (URI) alapcímet jelöli a ServiceHost(Type, Uri[]). Engedélyezze a metaadatok közzétételét, majd hívja meg a Open metódust a ServiceHost szolgáltatás inicializálásához és az üzenetek fogadásához való előkészítéséhez.
// Create the ServiceHost. using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress)) { // Enable metadata publishing. ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; host.Description.Behaviors.Add(smb); // Open the ServiceHost to start listening for messages. Since // no endpoints are explicitly configured, the runtime will create // one endpoint per base address for each service contract implemented // by the service. host.Open(); Console.WriteLine("The service is ready at {0}", baseAddress); Console.WriteLine("Press <Enter> to stop the service."); Console.ReadLine(); // Close the ServiceHost. host.Close(); }
' Create the ServiceHost. Using host As New ServiceHost(GetType(HelloWorldService), baseAddress) ' Enable metadata publishing. Dim smb As New ServiceMetadataBehavior() smb.HttpGetEnabled = True smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15 host.Description.Behaviors.Add(smb) ' Open the ServiceHost to start listening for messages. Since ' no endpoints are explicitly configured, the runtime will create ' one endpoint per base address for each service contract implemented ' by the service. host.Open() Console.WriteLine("The service is ready at {0}", baseAddress) Console.WriteLine("Press <Enter> to stop the service.") Console.ReadLine() ' Close the ServiceHost. host.Close() End Using
Feljegyzés
Ez a példa alapértelmezett végpontokat használ, és ehhez a szolgáltatáshoz nincs szükség konfigurációs fájlra. Ha nincsenek végpontok konfigurálva, akkor a futtatókörnyezet minden egyes szolgáltatásszerződéshez létrehoz egy végpontot a szolgáltatás által megvalósított minden egyes szolgáltatási szerződéshez. Az alapértelmezett végpontokról további információt a WCF-szolgáltatások egyszerűsített konfigurációja és egyszerűsített konfigurációja című témakörben talál.
A megoldás létrehozásához nyomja le a Ctrl Shift+B billentyűkombinációt.+
Szolgáltatás tesztelése
A szolgáltatás futtatásához nyomja le a Ctrl F5 billentyűkombinációt+.
Nyissa meg a WCF tesztügyfélt.
Tipp.
A WCF-tesztügyfél megnyitásához nyissa meg a Visual Studio fejlesztői parancssorát, és hajtsa végre a WcfTestClient.exe.
Válassza a Fájl menü Szolgáltatás hozzáadása elemét.
Írja be
http://localhost:8080/hello
a címmezőbe, és kattintson az OK gombra.Tipp.
Győződjön meg arról, hogy a szolgáltatás fut, különben ez a lépés meghiúsul. Ha módosította az alapcímet a kódban, használja a módosított alapcímet ebben a lépésben.
Kattintson duplán a SayHello elemre a Saját szolgáltatásprojektek csomópont alatt. Írja be a nevét a Kérelem lista Érték oszlopába, és kattintson a Meghívás gombra.
Megjelenik egy válaszüzenet a Válasz listában.
Példa
Az alábbi példa létrehoz egy objektumot ServiceHost egy típusú HelloWorldService
szolgáltatás üzemeltetéséhez, majd meghívja a Open metódust ServiceHost. A kód egy alapcímet ad meg, a metaadat-közzététel engedélyezve van, és az alapértelmezett végpontokat használja.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;
namespace SelfHost
{
[ServiceContract]
public interface IHelloWorldService
{
[OperationContract]
string SayHello(string name);
}
public class HelloWorldService : IHelloWorldService
{
public string SayHello(string name)
{
return string.Format("Hello, {0}", name);
}
}
class Program
{
static void Main(string[] args)
{
Uri baseAddress = new Uri("http://localhost:8080/hello");
// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
// Enable metadata publishing.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
// Open the ServiceHost to start listening for messages. Since
// no endpoints are explicitly configured, the runtime will create
// one endpoint per base address for each service contract implemented
// by the service.
host.Open();
Console.WriteLine("The service is ready at {0}", baseAddress);
Console.WriteLine("Press <Enter> to stop the service.");
Console.ReadLine();
// Close the ServiceHost.
host.Close();
}
}
}
}
Imports System.ServiceModel
Imports System.ServiceModel.Description
Module Module1
<ServiceContract()>
Public Interface IHelloWorldService
<OperationContract()>
Function SayHello(ByVal name As String) As String
End Interface
Public Class HelloWorldService
Implements IHelloWorldService
Public Function SayHello(ByVal name As String) As String Implements IHelloWorldService.SayHello
Return String.Format("Hello, {0}", name)
End Function
End Class
Sub Main()
Dim baseAddress As Uri = New Uri("http://localhost:8080/hello")
' Create the ServiceHost.
Using host As New ServiceHost(GetType(HelloWorldService), baseAddress)
' Enable metadata publishing.
Dim smb As New ServiceMetadataBehavior()
smb.HttpGetEnabled = True
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15
host.Description.Behaviors.Add(smb)
' Open the ServiceHost to start listening for messages. Since
' no endpoints are explicitly configured, the runtime will create
' one endpoint per base address for each service contract implemented
' by the service.
host.Open()
Console.WriteLine("The service is ready at {0}", baseAddress)
Console.WriteLine("Press <Enter> to stop the service.")
Console.ReadLine()
' Close the ServiceHost.
host.Close()
End Using
End Sub
End Module
Lásd még
- Uri
- AppSettings
- ConfigurationManager
- Útmutató: WCF-szolgáltatás üzemeltetve az IIS-ben
- Önkiszolgáló
- Üzemeltetési szolgáltatások
- Útmutató: Szolgáltatási szerződés definiálása
- Útmutató: Szolgáltatási szerződés megvalósítása
- ServiceModel Metadata Segédprogram (Svcutil.exe)
- Kötések használata szolgáltatások és ügyfelek konfigurálásához
- Rendszer által biztosított kötések