Frage

Meine erste Versuche auf eine Selbst Schaffung gehosteten Service. Der Versuch, etwas zu bilden welche eine Abfragezeichenfolge akzeptieren und einen Text zurück, aber haben noch ein paar Probleme:

  • Alle Dokumentation spricht über Endpunkte werden automatisch für jede Basisadresse erstellt, wenn sie nicht in einer Konfigurationsdatei zu finden sind. Dies scheint nicht der Fall für mich zu sein, erhalte ich den „Service hat null Anwendung Endpunkte ...“ Ausnahme. Manuelles Festlegen eines Basis Endpunkt wie unten dieses Problem zu beheben scheint:

    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 würde ich mich über diese Einrichtung den Wert des Namens in SayHello (string name) zurückzukehren, wenn thusly angefordert: localhost: 8080 / Helloworld / SayHello name = kyle

Ich versuche, vor dem Laufen zu gehen, aber dies scheint nur, wie Crawling ...

War es hilfreich?

Lösung

Für Ihre Frage zu Standardendpunkten nicht hinzugefügt werden:

  • vor allem, dass ein WCF 4 Feature ist - es wird 4 nur auf .NET arbeitet
  • Als nächstes werden die Standardendpunkte nur zu Ihrer Service-Host hinzugefügt, wenn Sie keine expliziten Endpunkte in Config definiert haben, und wenn Sie auf nicht hinzufügen Endpunkte selbst im Code ! Durch das Hinzufügen dieser beiden Endpunkte in Code, die Sie einnehmen Ladung und die WCF 4 Laufzeit wird nicht Geige mit der config

Überprüfen Sie in diesem MSDN-Bibliothek Artikel für weitere Informationen auf Was in WCF 4 ist neu für Entwickler . Es zeigt unter anderem, wie Standard-Endpunkte verwenden - Sie grundsätzlich eine Basisadresse für Ihren Dienst definieren und die Servicehost öffnen - das ist alles!

string baseaddr = "http://localhost:8080/HelloWorldService/";
Uri baseAddress = new Uri(baseaddr);

// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
   //for some reason a default endpoint does not get created here
   host.Open();

   // here, you should now have one endpoint for each contract and binding
}

Sie können auch die Standardendpunkte explizit hinzufügen, im Code, wenn Sie dies wünschen. Also, wenn Sie Ihre eigenen Endpunkte hinzufügen müssen, aber dann wollen Sie die Systemstandardendpunkte hinzufügen möchten, können Sie:

// define and add your own endpoints here

// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
   // add all the system default endpoints to your host
   host.AddDefaultEndpoints();

   //for some reason a default endpoint does not get created here
   host.Open();

   // here, you should now have your own endpoints, plus 
   // one endpoint for each contract and binding
}

ich auch fonud dieses Blog-Post hier ganz zu beleuchten - Christophers Blog ist gut voll und sehr hilfreich WCF Beiträge -. sehr zu empfehlen

Andere Tipps

Wie für Bücher - hier ist meine Empfehlung: das Buch, das ich immer empfehlen, in WCF aufstehen und laufen schnell ist Learning WCF von Michele Leroux Bustamante. Sie deckt alle notwendigen Themen, und in einem sehr verständlich und zugänglich Weg. Dies wird euch alles lehren - Grundlagen, Zwischen Themen, Sicherheit, Transaktionssteuerung und so weiter -., Dass Sie wissen müssen, um qualitativ hochwertige, nützliche WCF-Dienste schreiben

Learning WCF http://ecx.images-amazon.com/images/I/41wYa%2BNiPML._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

Die fortgeschrittenere Themen und mehr in eingehenden Blick auf WCF wird von Programmierung abgedeckt werden WCF-Dienste von Juval Löwy. Er taucht wirklich in allen technischen Details und Themen und präsentiert „die Bibel“ für WCF-Programmierung.

Wenn IIS Ihren Web-Dienst hostet, dann bekommen Sie die freundliche Seite „erhalten Sie einen Web-Service erstellt haben“, vorausgesetzt, sonst nichts falsch ist. Sie könnten ein paar schnelle WCF-Tutorials ausprobieren möchten, wie in Bustamente des Learning WCF Buch gefunden werden kann, gehen sie schnell und viel erklären.

EDIT: Hier ist eine MSDN-Seite , die zeigt, einen Weg zu erhält Abfrage-String-Parameter von Ihrem angeforderten Dienst Anruf, schönes Beispiel. Es zeigt die Verwendung von [WebGet] Attribute. Wenn Sie das nicht verwenden wollten, könnten Sie versuchen, mit Operation bei der eingehenden Anfrage Interna zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top