WCF Self Host Service - Endpunkte in C #

Meine ersten Versuche, einen selbst gehosteten Dienst zu erstellen. Der Versuch, etwas zu erfinden, das eine Abfragezeichenfolge akzeptiert und Text zurückgibt, jedoch einige Probleme aufweist:

In der gesamten Dokumentation wird davon gesprochen, dass Endpunkte automatisch für jede Basisadresse erstellt werden, wenn sie nicht in einer Konfigurationsdatei gefunden werden. Dies scheint bei mir nicht der Fall zu sein. Ich erhalte die Ausnahme "Der Dienst hat keine Anwendungsendpunkte ...". Das manuelle Angeben eines Basisendpunkts wie folgt scheint das Problem zu beheben:

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();
            }
         }
     }
}

Wie kann ich vorgehen, um den Wert von name in SayHello (Zeichenfolgenname) zurückzugeben, wenn ich dazu aufgefordert werde: localhost: 8080 / HelloWorldService / SayHello? Name = kyle

Ich versuche zu laufen, bevor ich renne, aber das scheint nur zu kriechen ...

Antworten auf die Frage(6)

Ihre Antwort auf die Frage