web-dev-qa-db-fra.com

Comment héberger mon service WCF sur mon site?

Je suis nouveau à la WCF. J'ai développé un exemple de service WCF. Mon service utilise la liaison basicHttp.

J'héberge mon service dans le local IIS 7.5 à l'aide de WAS et tout fonctionne correctement. Maintenant, je veux héberger mon service sur mon site web.

Je recherche Google mais la plupart d'entre eux sont hébergés dans localhost dans IIS. S'il vous plaît dites-moi comment je fais ça? Il sera préférable de consulter un tutoriel ou un guide étape par étape.

20
Md.Hasanuzzaman

Vous avez essentiellement deux options, je crois:

Option 1 - "bin" deploy (option préférée)

  1. compiler votre service WCF dans un DLL (bibliothèque de classes) 
  2. créer un site web dans IIS
  3. copier les DLL WCF dans le dossier .\bin du site Web
  4. créer un fichier *.svc sur ce site
  5. ajoutez un web.config approprié dans le dossier du site Web pour définir vos points de terminaison, la configuration du service, etc.

Votre service WCF sera désormais accessible à l’adresse de base du site Web, plus le nom du fichier *.svc, par exemple.

http://myserver/someweb/Myservice.svc

Votre *.svc ressemblerait à quelque chose comme ceci:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WCF_Simple_Service.HelloIndigoService"  %>

Les attributs Service= indiquent la classe implémentant le service - entièrement qualifié avec son espace de noms.

Option 2 - mettre des éléments dans App_Code

  1. créer un site web dans IIS
  2. placez tous vos fichiers *.cs liés à la WCF directement dans le dossier .\App_Code
  3. créer un fichier *.svc sur ce site
  4. ajoutez un web.config approprié dans le dossier du site Web pour définir vos points de terminaison, la configuration du service, etc.

Votre service WCF sera désormais accessible à l’adresse de base du site Web, plus le nom du fichier *.svc, par exemple.

http://myserver/someweb/Myservice.svc

Votre *.svc ressemblerait à quelque chose comme ceci:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="Service" 
    CodeBehind="~/App_Code/Service.cs" %>

Un exemple simple, web.config, pourrait ressembler à ceci:

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="WithDebug">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  <services>
    <service name="SimpleWCF.HelloIndigoService" behaviorConfiguration="WithDebug">
      <endpoint
          address=""
          binding="basicHttpBinding"
          contract="SimpleWCF.IHelloIndigoService" />
      <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

En gros, vous définissez votre balise <service> - et encore: le name= désigne la classe implémentant le service - entièrement qualifié avec son espace de noms. Il doit contenir au moins un paramètre - un critère "mex" est facultatif, mais très utile, en particulier pour le développement et les tests. Il permet au client de "découvrir" le service et d’obtenir sa description afin de s’interfacer avec lui.

Une fois que votre service est déployé dans IIS, vous pouvez le voir en action à l'aide d'un outil tel que le WCF Test Client qui est livré gratuitement avec WCF, ou SoapUI qui est une application polyvalente SOAP utilitaire de test (avec une édition gratuite à utiliser).

36
marc_s

vieux fil, si quelqu'un le trouve ... mais au lieu de votre * .svc, vous pouvez aussi créer dans votre global.asax:

static Global()
{
    RouteTable.Routes.Add(new ServiceRoute("ExternalServices/SOAP/test", new     ninjectServiceHostFactory(), typeof(testService)));
}
3
Roelant

En plus de la réponse de Marc, si vous ajoutez un attribut d'usine à votre fichier * .svc comme celui ci-dessous, vous n'avez pas besoin de modifier RIEN dans le fichier web.config qui se trouve dans votre projet principal. Permettez-moi de le répéter à nouveau. pas de gâchis massif dans le fichier web.config, laissez-le tel quel. C’est dû au fait que l’attribut Factory du fichier svc fait attention à tout.

<%@ ServiceHost Language="C#" Debug="true" Service="WCF_Simple_Service.HelloIndigoService" Factory="System.ServiceModel.Activation.WebServiceHostFactory"  %>

Mais je dois dire que lorsque vous appelez votre service, le système d'extrémité ne trouve pas d'erreur. Mais lorsque vous appelez vos méthodes à votre service, elles fonctionneront toutes. testé dans wcf reposant.

0
smoothumut