WCF: creare serviciu, configurare, gazduire pe serverul IIS, creare client
Voi prezenta cum se poate crea un serviciu Windows Communication Foundation (Indigo), pornind de la crearea unei solutii care sa continta, serviciul in sine, o librarie de creare de obiecte business, precum si directorul virtual care va gazdui serviciul in IIS.
Pentru a folosi acestea e nevoie de .Net 3.0. Mai multe despre cum se instaleaza aici
Pregatirea solutiei: Visual Studio 2005
- se creaza o solutie de tip librarie, numita IndigoService
- in solutie se adauga o doua librarii numite BusinessLogic si BusinessObjects
- in directorul radacina al solutiei se creaza un director IISHosting si in acest director un alt director bin
- in solutie se adauga un proiect de tip ConsoleApplication numit ServiceClient
Adaugarea claselor
in libraria BusinessObjects
- se adauga referinta la System.Runtime.Serialization
- se creaza clasa Customer
Customer.cs
using System.Runtime.Serialization;
namespace BusinessObjects
{
[DataContract]
public class Customer
{
[DataMember]public int ID;
[DataMember]public string Name;
}
}
- se compileaza libraria si se obtine dll-ul BusinessObjects.dll
in libraria BusinessLayer
- se adauga referinta la BusinessObjects.dll
- se creaza clasa BLL
BLL.cs
using BusinessObjects;
namespace BusinessLayer
{
public static class BLL
{
public static Customer GetCustomer ( int id )
{
// presupunem ca vom instantia un Customer cu informatie dintr-o baza de date
Customer c = new Customer();
c.Name = "Adrian Iftode";
c.ID = id;
return c;
}
}
}
- se compileaza libraria si se obtine dll-ul BusinessLayer.dll
in libraria IndigoService
- se adauga referinta la System.ServiceModel
- se adauga referinta la BusinessLayer.dll
- se adauga referinta la BusinessObjects.dll
- se adauga doua clase in fisiere separate: o interfata numita IServiceIntentions si o clasa care implementeaza interfata ServiceImplementation
- se adauga un fisier de configurare Web.config
- se adauga un fisier de configurare pentru IIS IISHostingConfigFile.svc (se alege un Text File a carui extensie se redenumeste .svc)
IServiceIntentions.cs
using System.ServiceModel;
using BusinessObjects;
namespace IndigoService
{
[ServiceContract]
public interface IServiceIntentions
{
[OperationContract]
Customer GetCustomer(int CustomerID);
}
}
ServiceImplementation.cs
using System.ServiceModel.Activation;
using BusinessObjects;
using BusinessLayer;
namespace IndigoService
{
[AspNetCompatibilityRequirements ( RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed )]
public class ServiceImplementation : IServiceIntentions
{
public Customer GetCustomer ( int CustomerID )
{
return BLL.GetCustomer(CustomerID);
}
}
}
WebConfig.cs
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service
behaviorConfiguration="MEX"
name="ServiciulIndigo.ServiceImplementation"
>
<endpoint address="http://localhost/IndigoService/IISHostingConfigFile.svc"
binding="basicHttpBinding"
bindingName="NewBinding0"
contract="IndigoService.IServiceIntentions"
>
</endpoint>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="NewBinding0" />
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MEX">
<!-- pentru a putea vedea proprietatile serviciului MetadataExchange-->
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
IISHostinConfigFile.svc
<%@ ServiceHost
Language = "C#"
Debug = "true"
Service = "IndigoService.ServiceImplementation"
%>
- se compileaza libraria si se obtine dll-ul IndigoService.dll
Gazduirea in IIS
- Se creeaza un nou director virtual pe serverul IIS: Windows+R\inetmgr.exe si se deschide IIS
- clik dreapta pe WebSites\Default Web Site\ si New\VirtualDirectory\
- Next.. apoi se da un nume .. se pune calea directorului IISHosting
- Next.. se bifeaza Read, Run scripts, Browse
- Finish
La fiecare librarie se adauga la evenimentul PostBuild( Properties\BuildEvents) urmatoarea actiune:
xcopy $(TargetPath) $(SolutionDir)IISHosting\bin /R /Y
La libraria IndigoService la acelasi eveniment se mai adauga urmatoarele linii:
xcopy $(ProjectDir)Web.config $(SolutionDir)IISHosting /R /Y
xcopy $(ProjectDir)IISHostingConfigFile.svc $(SolutionDir)IISHosting /R /Y
Se compileaza si se rezolva fiecare eroare :)
Se verifica in directorul IISHosting\bin daca apar cele trei librarii si daca in directorul IISHosting apar fisierele Web.config si IISHostingConfigFile.svc
Crearea directorului virtual
Se selecteaza directorul creat, click dreapta, Browse. Se da click pe linkul IISHostingConfigFile.svc
Daca totul e ok si nu apare nici un mesaj de eroare, in pagina ar trebui sa se vada cum se poate crea un client pentru serviciul WCF precum si cum se genereaza proxiul pentru serviciu, folosind tool-ul svcutil
svcutil.exe http://localhost/IndigoService/IISHostingConfigFile.svc?wsdl
class Test
{
static void Main()
{
ServiceIntentionsClient client = new ServiceIntentionsClient();
// Use the 'client' variable to call operations on the service.
// Always close the client.
client.Close();
}
}
Comments
Post a Comment