Útmutató: WCF-szolgáltatás üzemeltetve az IIS-ben
Ez a témakör az Internet Information Servicesben (IIS) üzemeltetett Windows Communication Foundation (WCF) szolgáltatás létrehozásához szükséges alapvető lépéseket ismerteti. Ez a témakör feltételezi, hogy ismeri az IIS-t, és tisztában van azzal, hogyan hozhat létre és kezelhet IIS-alkalmazásokat az IIS felügyeleti eszközével. Az IIS-ről további információt az Internet Information Services nyújt. Az IIS-környezetben futó WCF-szolgáltatások teljes mértékben kihasználják az IIS-funkciókat, például a folyamat-újrahasznosítást, az inaktív leállítást, a folyamatállapot-monitorozást és az üzenetalapú aktiválást. Ez az üzemeltetési lehetőség megköveteli az IIS megfelelő konfigurálását, de nem követeli meg, hogy az alkalmazás részeként bármilyen üzemeltetési kódot meg kell írni. Az IIS-üzemeltetést csak HTTP-átvitellel használhatja.
A WCF és ASP.NET interakciójáról további információt a WCF-szolgáltatások és a ASP.NET című témakörben talál. A biztonság konfigurálásáról további információt a Biztonság című témakörben talál.
A példa forráspéldányát lásd : IIS Hosting Using Inline Code.
IIS által üzemeltetett szolgáltatás létrehozása
Győződjön meg arról, hogy az IIS telepítve van és fut a számítógépen. Az IIS telepítésével és konfigurálásával kapcsolatos további információkért lásd: IIS 7.0 telepítése és konfigurálása
Hozzon létre egy új mappát az "IISHostedCalcService" nevű alkalmazásfájlokhoz, győződjön meg arról, hogy ASP.NET hozzáfér a mappa tartalmához, és az IIS felügyeleti eszközével hozzon létre egy új, fizikailag ebben az alkalmazáskönyvtárban található IIS-alkalmazást. Az alkalmazáskönyvtár aliasának létrehozásakor használja az "IISHostedCalc" kifejezést.
Hozzon létre egy új fájlt "service.svc" néven az alkalmazáskönyvtárban. Szerkessze ezt a fájlt a következő @ServiceHost elem hozzáadásával.
<%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%>
Hozzon létre egy App_Code alkönyvtárat az alkalmazáskönyvtárban.
Hozzon létre egy Service.cs nevű kódfájlt a App_Code alkönyvtárban.
Adja hozzá a következő
using
irányelveket a Service.cs fájl elejéhez.using System; using System.ServiceModel;
Adja hozzá a következő névtér-deklarációt az
using
irányelvek után.namespace Microsoft.ServiceModel.Samples { }
Adja meg a szolgáltatási szerződést a névtér deklarációjában az alábbi kódban látható módon.
[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
Hajtsa végre a szolgáltatási szerződést a szolgáltatási szerződés definíciója után az alábbi kódban látható módon.
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
Hozzon létre egy "Web.config" nevű fájlt az alkalmazáskönyvtárban, és adja hozzá a következő konfigurációs kódot a fájlhoz. Futásidőben a WCF-infrastruktúra az információk alapján hoz létre egy végpontot, amellyel az ügyfélalkalmazások kommunikálhatnak.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehaviors"> <!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc --> <endpoint address="" binding="wsHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator" /> <!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex --> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> <behaviors> <serviceBehaviors> <behavior name="CalculatorServiceBehaviors"> <!-- Add the following element to your service behavior configuration. --> <serviceMetadata httpGetEnabled="true" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
Ez a példa kifejezetten meghatározza a konfigurációs fájl végpontjait. Ha nem ad hozzá végpontokat a szolgáltatáshoz, a futtatókörnyezet alapértelmezett végpontokat ad hozzá. Az alapértelmezett végpontokkal, kötésekkel és viselkedésekkel kapcsolatos további információkért lásd a WCF-szolgáltatások egyszerűsített konfigurációját és egyszerűsített konfigurációját.
Annak érdekében, hogy a szolgáltatás megfelelően legyen üzemeltetve, nyisson meg egy böngészőt, és keresse meg a szolgáltatás URL-címét:
http://localhost/IISHostedCalc/Service.svc
Példa
Az alábbiakban az IIS által üzemeltetett számológép szolgáltatás kódjának teljes listája látható.
using System;
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
[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);
}
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;
}
}
}
Imports System.ServiceModel
Namespace Microsoft.ServiceModel.Samples
<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
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
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="CalculatorServiceBehaviors">
<!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc -->
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex -->
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehaviors">
<!-- Add the following element to your service behavior configuration. -->
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>