A coeur vaillant, rien d'impossible!
Je vois pas d'ou viens le problème en fait...
Voici comment faire:
Tes points d'entrées de webservices sont les .svc, tu peux les créer dynamiquement, c'est juste une ligne:
<%@ ServiceHost Language="C#" Debug="true" Factory="WebApplication1.MyFactory" Service="WebApplication1.Service1Impl" %>
L'important la dedans c'est ton WebApplication1.MyFactory, cette classe est responsable de l'instantiation et l'hebergement du service.
Voici un exemple:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
if (serviceType == typeof(Service1Impl))
{
var binding = new WSHttpBinding(SecurityMode.None);
var host = new ServiceHost(serviceType, baseAddresses);
host.AddServiceEndpoint(typeof(IService1), binding, "");
return host;
}
else if (serviceType == typeof(Service2Impl))
{
var binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
var host = new ServiceHost(serviceType, baseAddresses);
host.AddServiceEndpoint(typeof(IService2), binding, "");
return host;
}
throw new Exception("Unknown type!");
} |
Dans cette factory tu peux faire un peu ce que tu veux, récuperer sur un xml comment en fonction du type tu crées ton endpoint, etc.
Ici comme tu vois, j'ai crée un basichttpbinding si on demande l'url service2.svc ou un wshttpbinding si on me demande l'url service1.svc
Mettre les configs des services dans le web.config n'est pas une obligation!
Edit: tu n'es pas obligé de faire une factory commune pour tous tes trucs.
Tu peux mettre directement le service et sa factory dans ton assembly plugin (laquelle dll devra bien sur être dans le repertoire bin/ de l'appli)
Partager