2010-09-21 12 views
1

Essayer de suivre cet exemple pour faire fonctionner: http://weblogs.asp.net/kiyoshi/archive/2008/10/08/wcf-using-webhttpbinding-for-rest-services.aspxWebHttpBinding dans WCF: comment le configurer correctement?

Voici mon App.config:

<system.serviceModel> 
    <services>  
     <!-- The service for the TEST WEB client --> 
     <service name="MyServer.AAServiceType" behaviorConfiguration="Default"> 
     <endpoint address="testservice" 
        binding="webHttpBinding" behaviorConfiguration="webBehavior" 
        contract="MyServer.AAIContractName" /> 
     <host> 
      <baseAddresses> 
       <add baseAddress="http://localhost:8787/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <!-- TEST WEB BEHAVIOR --> 
      <behavior name="Default"> 
      <serviceMetadata httpGetEnabled="true"/> 
      </behavior> 
     </serviceBehaviors> 
     <!-- TEST WEB ENDPOINT --> 
     <endpointBehaviors> 
      <behavior name="webBehavior"> 
      <webHttp /> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
</system.serviceModel> 

Mise à jour: Le contrat de service est:

namespace MyServer 
{ 
    [ServiceContract(SessionMode=SessionMode.NotAllowed)] 
    public interface IContractName 
    { 
     [WebGet(UriTemplate = "date/{year}/{month}/{day}", ResponseFormat = WebMessageFormat.Xml)] 
     [OperationContract] 
     string GetDate(string day, string month, string year); 
    } 

    public class ServiceType : IContractName 
    { 
     public string GetDate(string day, string month, string year) 
     { 
      return new DateTime(Convert.ToInt32(year), Convert.ToInt32(month), Convert.ToInt32(day)).ToString("dddd, MMMM dd, yyyy"); 
     } 
    } 
} 

Le problème est que lorsque J'essaie de me connecter au port 8787 (en utilisant putty, par exemple) un "Connexion refusée" erreur est retournée. Comme vous pouvez le voir, j'ai également essayé de mettre les mauvais noms dans la classe de contrat et la mise en œuvre du service et n'a obtenu aucune exception. Qu'est-ce que je fais de mal, s'il vous plait?

+0

Pouvez-vous nous montrer votre contrat de service? Quel type de modèle d'URL spécifiez-vous? –

+0

Bien sûr. Veuillez voir la mise à jour. Également arrêté l'IIS installé localement (via la console d'interface utilisateur) pour s'assurer que personne n'intercepte les requêtes HTTP. – BreakPhreak

+0

D'accord, problème trouvé - fourni la réponse de la mienne. – BreakPhreak

Répondre

1

Une erreur s'est produite dans le code qui a lancé le service. Le code correct est:

using (ServiceHost serviceHost = new ServiceHost(typeof(ServiceType))) 
{ 
    try 
    { 
     // Open the ServiceHost to start listening for messages. 
     serviceHost.Open(); 

     // The service can now be accessed. 
     Console.WriteLine("The service is ready."); 
     Console.WriteLine("Press <ENTER> to terminate service."); 
     Console.ReadLine(); 

     // Close the ServiceHost. 
     serviceHost.Close(); 
    } 
    catch (CommunicationException commProblem) 
    { 
     Console.WriteLine(commProblem.Message); 
     Console.ReadLine(); 
    } 
} 
+2

OK, donc avec cela, l'URL 'http: // localhost: 8787/testservice/date/2010/08/31' fonctionne? –

+0

enfin, oui :) – BreakPhreak

1

Hébergez-vous dans IIS, ou auto-hébergement?

Si vous hébergez ceci dans IIS (en utilisant un fichier * .svc), IIS dicte l'adresse - il sera

http://yourserver/yourvirtualdirectory/yourservice.svc/......... 

Si vous auto-hôte, puis tout semble OK pour moi - dans ce cas, votre adresse de base entre en jeu:

http://localhost:8787/testservice 

devrait être votre adresse de service maintenant.

+0

Je m'auto-héberge. J'ai essayé les deux: se connecter exactement à la même URL que vous avez suggéré ET se connecter uniquement au port 8787 avec 'putty'. Échoué de toute façon. – BreakPhreak