2010-03-07 4 views
1

J'ai cherché en ligne une solution, mais je n'ai pas encore trouvé celle qui fonctionne.Exception WCF sur serveur hébergé

J'ai une application Silverlight qui utilise un service Web WCF.

Tout va bien sur mon environnement de développement.

Quand je publie sur mon compte DiscountASP.NET - le service Web me donne l'exception suivante:

« Erreur du serveur dans '/ e-learning/Services de demande Le type « eLearning.Web.Services.Learning. , eLearning.Web », à condition que la valeur d'attribut de service dans la directive ServiceHost n'a pas pu être trouvé"

S'il vous plaît se référer à l'exception réelle à:.

http://www.christophernotley.com/eLearning/Services/Learning.svc

J'ai créé "eLearning" une application web - et déplacé web.config dans le répertoire racine.

J'ai également confirmé que dans le balisage du service Web, la propriété de service indique "eLearning.Web.Services.Learning, eLearning.Web".

Des idées sur ce que je fais mal?

Merci.

Chris

Voici le balisage pour le service Web:

<%@ ServiceHost Language="C#" Debug="true" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Service="eLearning.Web.Services.Learning, eLearning.Web" CodeBehind="Learning.svc.cs" %> 

Voici la configuration web System.ServiceModel:

<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="RestBehaviorConfig"> 
       <webHttp/> 
      </behavior> 
      <behavior name="webBehavior"> 
       <webHttp/> 
      </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
      <behavior name="DebugEnabled"> 
     <serviceMetadata httpGetEnabled="true"/> 
       <serviceDebug includeExceptionDetailInFaults="true"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <customBinding> 
      <binding name="customBinding0"> 
       <binaryMessageEncoding/> 
       <httpTransport/> 
      </binding> 
     </customBinding> 
    </bindings> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"> 
     <baseAddressPrefixFilters> 
    <add prefix="http://www.christophernotley.com/"/> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
    <services> 
    <service behaviorConfiguration="DebugEnabled" name="eLearning.Web.Services.Learning"> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
    </services> 

</system.serviceModel> 

Répondre

2

Eh bien, dans un scénario de WCF, votre service L'URL est déterminée par trois éléments:

  • le nom du serveur
  • le répertoire virtuel (et les sous-répertoires) où vit svc fichier
  • le nom et l'extension du fichier svc se

Dans votre cas, l'URL est

http://www.christophernotley.com/eLearning/Services/Learning.svc 

donc cela pose la question:

  • est vraiment /eLearning défini comme un répertoire virtuel?
  • Y a-t-il un sous-répertoire /Services sous votre répertoire virtuel?
  • est le nom du fichier * .svc correct?
  • Où se trouve le code de service actuel? Avez-vous un assembly avec l'implémentation de service, et est-il situé dans un endroit qui est accessible au fichier * .svc? (c'est le répertoire, un sous-répertoire. \ bin)? Ou est le code dans un répertoire App_Code? Où est ce répertoire ??

MISE À JOUR:

Je suis un peu confus au sujet de votre configuration ..... vous dites /eLearning/Services est une application - une application virtuelle définie dans IIS, droit?

Dans votre fichier Learning.svc, vous définissez un fichier code-behind de Learning.svc.cs - votre code de service existe-t-il? (parce que dans une autre instruction, vous mentionnez un répertoire. \ bin sous/eLearning - votre service est-il compilé dans un assembly qui est déployé dans ce répertoire bin?)

+0

J'ai posté le balisage de service web et le web.config, dans cas cela aide. J'ai défini/eLearning en tant qu'application dans le panneau de contrôle de DiscountASP.NET. J'ai également défini/eLearning/Services en tant qu'application. Le nom du fichier * .svc est Learning.svc. Le code de service actuel se trouve dans le répertoire \ bin, qui se trouve dans \ eLearning. – Chris

+0

Basé sur le message d'erreur (type manquant), je suppose que c'est votre dernier point - l'assemblage manquant, c'est-à-dire le répertoire 'bin'. – Aaronaught

+0

Mais les assemblys dans le framework .NET n'ont pas besoin d'être inclus dans le répertoire/bin, n'est-ce pas? Par exemple, dans mon balisage de service, j'utilise "System.Data.Services.DataServiceHostFactory" pour la fabrique de services. Cela signifie-t-il que System.Data.Services.dll doit être inclus dans le répertoire/bin? – Chris

Questions connexes