Question

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

  • Toutes les discussions de documentation sur les paramètres ont été créés automatiquement pour chaque adresse de base si elles ne se trouvent pas dans un fichier de configuration. Cela ne semble pas être le cas pour moi, je reçois l'exception « service a zéro points d'extrémité d'application ... ». spécifiant manuellement un paramètre de base semble ci-dessous pour résoudre ce:

    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 dois-je mettre cela à retourner la valeur du nom SayHello (nom de la chaîne) à la demande ainsi: localhost: 8080 / HelloWorldService / SayHello name = kyle

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

Était-ce utile?

La solution

Pour votre question sur paramètres par défaut ne sont pas ajoutés:

  • d'abord, qui est une fonctionnalité WCF 4 - il ne fonctionnera que sur .NET 4
  • suivant, les critères d'évaluation par défaut ne sont ajoutés à votre hôte de service si vous avez pas de point d'explicites définis dans la configuration, et si vous ne pas ajouter vous-même dans le code paramètres ! En ajoutant ces deux points de terminaison dans le code, vous prenez en charge et le moteur d'exécution WCF 4 ne tripoter votre config

Consultez cet article de la bibliothèque MSDN pour plus d'informations sur Quoi de neuf dans WCF 4 pour les développeurs . Il montre, entre autres, comment utiliser paramètres par défaut - vous définissez essentiellement une adresse de base pour votre service et ouvrir le ServiceHost - c'est tout!

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
}

Vous pouvez également ajouter les paramètres par défaut explicitement, dans le code, si vous souhaitez le faire. Donc, si vous avez besoin d'ajouter vos propres points de terminaison, mais vous voulez ajouter les paramètres par défaut du système, vous pouvez utiliser:

// 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
}

J'ai aussi fonud ce blog ici tout à fait éclairante - le blog de Christopher est plein de bons et messages très utiles WCF -. fortement recommandé

Autres conseils

En ce qui concerne les livres - voici ma recommandation: le livre que je recommande toujours de se lever et courir dans WCF est rapidement apprentissage WCF par Michele Leroux Bustamante. Elle couvre tous les sujets nécessaires, et d'une manière très compréhensible et accessible. Cela vous apprendra tout - bases, sujets intermédiaires, la sécurité, le contrôle des transactions et ainsi de suite -. Que vous devez savoir pour écrire de haute qualité, des services WCF utiles

Apprendre 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

Les sujets plus avancés et plus en profondeur regardent WCF seront couverts par Programmation services WCF par Juval Lowy. Il plonge vraiment dans tous les détails techniques et des sujets et présente « la bible » pour la programmation WCF.

Si IIS héberge votre service Web, vous obtenez le sympathique « vous avez créé un service Web » à la page, en supposant rien d'autre ne va pas. Vous voudrez peut-être essayer quelques tutoriels WCF rapides, comme on peut le trouver dans l'apprentissage du livre de WCF Bustamente, ils vont vite et expliquer beaucoup.

EDIT: Voici une page MSDN qui montre une façon de obtenir les paramètres de chaîne de requête hors de votre appel de service demandé, bel exemple. Il montre l'utilisation de l'attribut [WebGet]. Si vous ne voulez pas l'utiliser, vous pouvez essayer d'utiliser OperationContext pour obtenir au internals de la requête entrante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top