2010-05-12 7 views
0

J'ai une classe TestService qui implémente deux contrats de service appelés IService1 et IService2. Mais je suis confronté à une difficulté de mise en œuvre. Mon code se présente comme suit:classe wcf implémentant plusieurs contrats de service

Uri baseAddress = new Uri("http://localhost:8000/ServiceModel/Service"); 
Uri baseAddress1 = new Uri("http://localhost:8080/ServiceModel/Service1"); 

ServiceHost selfHost = new ServiceHost(typeof(TestService)); 

selfHost.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), baseAddress); 
selfHost.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), baseAddress1); 

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = true; 
selfHost.Description.Behaviors.Add(smb); 

selfHost.Open(); 
Console.WriteLine("The service is ready."); 
Console.WriteLine("Press <ENTER> to terminate service."); 
Console.WriteLine(); 
Console.ReadLine(); 

selfHost.Close(); 

Je reçois une erreur de temps d'exécution comme:

La propriété HttpGetEnabled de ServiceMetadataBehavior est définie sur true et la propriété HttpGetUrl est une adresse relative , mais il n'y a pas d'adresse de base http . Fournissez une adresse de base http ou définissez HttpGetUrl sur une adresse absolue .

Que dois-je faire à ce sujet? Ai-je vraiment besoin de deux points de terminaison distincts? Merci.

Répondre

2

vous pouvez le fixer de deux façons

1)

Uri baseAddress = new Uri("http://localhost:8000/ServiceModel"); 
ServiceHost selfHost = new ServiceHost(typeof(TestService), baseAdress); 

selfHost.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), "Service"); 
selfHost.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), "Service1"); 

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = true; 
selfHost.Description.Behaviors.Add(smb); 

2)

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = true; 
smb.HttpGetUrl = new Uri("http://localhost:8000/ServiceModel"); 
selfHost.Description.Behaviors.Add(smb); 
1

Tout ce que vous devez faire est d'ajouter une adresse de base. vous avez toujours deux points de terminaison séparés.

ServiceHost selfHost = new ServiceHost(typeof(TestService), new Uri ("http://localhost:8080/ServiceModel")); 
Questions connexes