2010-02-09 9 views
3

Depuis que j'envisage d'utiliser WCF, j'ai pensé qu'il serait préférable de suivre un simple tutoriel pour me mouiller les pieds.Exception WCF: InvalidOperationException n'a pas été manipulé

3 heures plus tard, j'ai seulement une exception pour montrer. Ça ne partira pas.

J'ai exclu que le fichier app.config ne soit pas chargé. Si je change: wsHttpBinding dans la config à JHGHJGH il donne une erreur lors de l'exécution. Cependant quand je change le nom de l'interface de contrat, aucune erreur n'est donnée (excepté la même que je fais face aux 3 dernières heures)

Est-ce que quelqu'un a une idée comment déboguer ceci? Ce genre d'erreur de blackbox est très rebutant pour moi.

pleine exception:

Service 'WCFtest.TestService' a zéro l'application (non-infrastructure) points d'extrémité. Cela pourrait être parce qu'aucun fichier de configuration a été trouvé pour votre dossier demande , ou parce qu'aucun service élément correspondant au nom du service se trouve dans la configuration , ou parce que aucun point de terminaison ont été défini dans l'élément de service

(ne vous aime pas ces erreurs qui indiquent l'une des 16 choses possibles qui pourraient être mal)

mes Program.cs

ServiceHost host; 
Type serviceType = typeof(TestService); 
host = new ServiceHost(serviceType); 
host.Open(); //<---- exception is thrown here 
Console.ReadLine(); 

mon test 'service WCF'

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ServiceModel; 

namespace WCFtest 
{ 
    [ServiceContract] 
    public interface ITest 
    { 
     [OperationContract] 
     double Add(double n1, double n2); 
     [OperationContract] 
     double Subtract(double n1, double n2); 
     [OperationContract] 
     double Multiply(double n1, double n2); 
     [OperationContract] 
     double Divide(double n1, double n2); 
    } 

    public class TestService : ITest 
    { 
     public double Add(double n1, double n2) 
     { 
      double result = n1 + n2; 
      return result; 
     } 
     etc... some methods are removed for brevity 
    } 
} 

mon app.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service name="WCFtest.testservice" 
       behaviorConfiguration="testservicebehaviour"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8080/test"/> 
      </baseAddresses> 
     </host> 
     <endpoint address="" 
       binding="wsHttpBinding" 
       contract="WCFtest.ITest" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="testservicebehaviour"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="False"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

Répondre

1

L'attribut "name" de l'élément dans le app.config est sensible à la casse.

Au lieu de "WCFTest.testservice", vous devez spécifier "WCFtest.TestService" comme ceci:

<service name="WCFtest.TestService" behaviorConfiguration="testservicebehaviour"> 
+0

Bonne prise. Je pensais que le nom de service était en fait un nom que vous lui donneriez. Mais vous dites qu'il doit correspondre à la classe qui implémente le service. Merci! Amamzing comment on peut regarder pendant 3 heures à ceci, et quelqu'un d'autre le repère dans quelques minutes – Toad

+0

Arrive à tout le monde;). Voici une explication: "L'attribut de nom de service spécifié dans le fichier de configuration fonctionne comme une clé de recherche pour ExchangeService.svc correspondant, il indique à l'environnement d'hébergement à quel service appartient cette configuration." [source: http://msdn.microsoft.com/en-us/library/bb332338.aspx] – urig

+0

J'ai eu un peu peur de toute l'expérience WPF. En surface, il ajoute juste quelques attributs dans le code source. Mais la config, et les trucs qui vont et viennent (je l'ai reniflé) est incroyablement complexe. L'interopérer avec d'autres technologies comme PHP par exemple, c'est quelque chose que je n'oserais même pas toucher. – Toad

3

Ce n'est pas une chose de cas, est-il? Votre config web dit;

WCFtest.testservice 

mais votre code dit

WCFtest.TestService 

Je soupçonne la différence en cas peut faire quelque chose; Habituellement, les types C# sont sensibles à la casse. Je suis nouveau à WCF, cependant ...

Questions connexes