WCF Auto-Service d'Accueil - les points de terminaison en C#

Mes premières tentatives de création d'un self service hébergé. Essayer de faire quelque chose qui accepte une chaîne de requête et de retourner une partie de texte, mais ont quelques questions:

  • L'ensemble de la documentation parle de points de terminaison d'être créé automatiquement pour chaque adresse de base s'ils ne sont pas trouvés dans un fichier de config. Cela ne semble pas être le cas pour moi, j'ai le "Service a zéro points de terminaison d'application..." l'exception". Spécifier manuellement une base de point de terminaison comme ci-dessous semble résoudre ce problème:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    using System.ServiceModel.Description;
    
    namespace TestService
    {
        [ServiceContract]
        public interface IHelloWorldService
        {
           [OperationContract]
           string SayHello(string name);
        }
    
        public class HelloWorldService : IHelloWorldService
        {
            public string SayHello(string name)
            {
               return string.Format("Hello, {0}", name);
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                string baseaddr = "http://localhost:8080/HelloWorldService/";
                Uri baseAddress = new Uri(baseaddr);
    
                //Create the ServiceHost.
                using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
                {
                    //Enable metadata publishing.
                    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                    smb.HttpGetEnabled = true;
                    smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
                    host.Description.Behaviors.Add(smb);
    
                    host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr);
                    host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr + "SayHello");
    
                    //for some reason a default endpoint does not get created here
                    host.Open();
    
                    Console.WriteLine("The service is ready at {0}", baseAddress);
                    Console.WriteLine("Press <Enter> to stop the service.");
                    Console.ReadLine();
    
                    //Close the ServiceHost.
                    host.Close();
                }
             }
         }
    }
  • Comment pourrais-je aller sur la configuration de ce haut pour revenir à la valeur de nom à la méthode SayHello(string nom) lorsque requis ainsi: localhost:8080/HelloWorldService/SayHello?nom=kyle

Je suis en train de marcher avant de courir, mais cela semble juste comme ramper...

Êtes-vous à l'aide .NET 3.5 ou .NET 4 ?? "Créer des points de terminaison par défaut pour l'adresse de base" est une chose nouvelle dans .NET 4 - ne fonctionne pas en 3.5

OriginalL'auteur Kyle | 2010-05-11