2010-04-29 9 views
12

J'ai essayé de suivre ce tutorial pour déployer un échantillon WCF vers IIS. Je ne peux pas le faire fonctionner. C'est un site hébergé, mais j'ai un accès au serveur IIS. Cependant, à l'étape 2 du didacticiel, je ne peux pas "créer une nouvelle application IIS qui se trouve physiquement dans ce répertoire d'application". Je n'arrive pas à trouver un élément de menu, un élément de menu contextuel ou quoi créer une nouvelle application. J'ai fait un clic droit partout comme un fou et je n'arrive toujours pas à comprendre comment créer une nouvelle application. Je suppose que c'est probablement le problème racine, mais j'ai essayé quelques autres choses (décrites ci-dessous) juste au cas où ce n'est pas le problème. Voici une photo de ce que je vois dans le Gestionnaire IIS, dans le cas où mes paroles ne le font pas justice:Déploiement de l'application Tutorial WCF sur IIS7: "Le type n'a pas pu être trouvé"

No add Application Here http://www.freeimagehosting.net/uploads/d6edbaaf3c.png

C'est « déployé » à http://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svc. L'erreur dit:

The type 'Microsoft.ServiceModel.Samples.CalculatorService', 
provided as the Service attribute value in the ServiceHost directive, 
or provided in the configuration element 
system.serviceModel/serviceHostingEnvironment/serviceActivations 
could not be found. 

J'ai aussi essayé de créer un répertoire virtuel (IISHostedCalc) en DotNetPanel qui pointe vers IISHostedCalcService. Quand je navigue à http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc, puis il y a une autre erreur:

This collection already contains an address with scheme http. 
There can be at most one address per scheme in this collection. 

Il est intéressant, si je clique sur Afficher les applications, il semble que le répertoire virtuel est une application (voir image ci-dessous) ... bien que, comme par le message d'erreur ci-dessus, cela ne fonctionne pas.

Is this an app or not? http://www.freeimagehosting.net/uploads/f3230be046.png

Selon le tutoriel, il n'y avait pas la compilation impliqué; Je viens de tomber les fichiers sur le serveur comme suivre dans le dossier IISHostedCalcService:

service.svc 
Web.config 
<dir: App_Code> 
    Service.cs 

service.svc contient:

<%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"%> 

(j'ai essayé avec des guillemets autour du C# attribut, comme cela semble un peu étrange sans les guillemets, mais il n'a fait aucune différence)

Web.config contient:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <services> 
     <service name="Microsoft.ServiceModel.Samples.CalculatorService"> 

     <!-- This endpoint is exposed at the base address provided by host:          http://localhost/servicemodelsamples/service.svc --> 
     <endpoint address="" 
        binding="wsHttpBinding" 
        contract="Microsoft.ServiceModel.Samples.ICalculator" /> 

     <!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex --> 
     <endpoint address="mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" /> 
     </service> 
    </services> 
    </system.serviceModel> 
    <system.web> 
    <customErrors mode="Off"/> 
    </system.web> 
</configuration> 

Service.cs contient:

using System; 
using System.ServiceModel; 

namespace Microsoft.ServiceModel.Samples 
{ 

    [ServiceContract] 
    public interface ICalculator 
    { 
     [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 CalculatorService : ICalculator 
    { 
     public double Add(double n1, double n2) 
     { 
      return n1 + n2; 
     } 
     public double Subtract(double n1, double n2) 
     { 
      return n1 - n2; 
     } 
     public double Multiply(double n1, double n2) 
     { 
      return n1 * n2; 
     } 
     public double Divide(double n1, double n2) 
     { 
      return n1/n2; 
     } 
    } 
} 

Répondre

7

Eh bien, il semble que j'ai eu ce travail. Je ne trouve toujours pas l'élément "Créer une application" dans le Gestionnaire des services Internet. Cette partie est un peu frustrante, mais je suis content qu'elle semble fonctionner de toute façon.

J'ai créé le répertoire physique IISHostedCalcService sous wwwroot. Cela créait une certaine confusion. cela signifiait que http://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svc fonctionnait presque, mais il ne devrait pas. J'ai déplacé IISHostedCalcService en dehors de wwwroot et maintenant le seul endroit pour accéder au service est http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc.

Ensuite, l'accès à http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc jetais que « Cette collection contient déjà une adresse avec le schéma http.
Il peut y avoir au plus une adresse par programme dans cette collection. » Erreur. Il s'avère que la solution à cela est d'ajouter ce qui suit au fichier web.config, juste sous le système.ServiceModel:

<serviceHostingEnvironment> 
    <baseAddressPrefixFilters> 
    <add prefix="http://test.com.cws1.my-hosting-panel.com"/> 
    </baseAddressPrefixFilters> 
</serviceHostingEnvironment> 

Après que je me suis une nouvelle erreur lorsque ccès http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc: « Le nom du contrat IMetadataExchange n'a pas pu être trouvée dans la liste des contrats mis en œuvre par le service CalculatorService ». Il se trouve la solution à cette question est de modifier le fichier web.config comme suit (càd, ajoutez la section comportements et behaviorConfiguration = « SimpleServiceBehavior » dans l'élément de service):

<configuration> 
    <system.serviceModel> 
    <serviceHostingEnvironment> 
     <baseAddressPrefixFilters> 
     <add prefix="http://test.com.cws1.my-hosting-panel.com"/> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
    <services> 
     <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="SimpleServiceBehavior"> 
     ... 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="SimpleServiceBehavior"> 
      <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
    <system.web> 
    <customErrors mode="Off"/> 
    </system.web> 
</configuration> 

Enfin, j'ai pu créer des proxys client en pointant svcutil à http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/service.svc?wsdl à l'étape 5c du tutoriel au http://msdn.microsoft.com/en-us/library/ms733133.aspx. Cependant, lorsque j'ai exécuté le client, j'ai reçu une erreur "L'appelant n'a pas été authentifié par le service". La solution à c'était la plus simple: il suffit de changer de liaison = « wsHttpBinding » à la liaison = « basicHttpBinding » dans le web.config et le web.config du client du service (ou relancer svcutil après avoir changé le web.config du service).

Le web.config a fini par ressembler à ceci:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <serviceHostingEnvironment> 
     <baseAddressPrefixFilters> 
     <add prefix="http://test.com.cws1.my-hosting-panel.com"/> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
    <services> 
     <service name="Microsoft.ServiceModel.Samples.CalculatorService" behaviorConfiguration="SimpleServiceBehavior"> 

     <!-- This endpoint is exposed at the base address provided by host:          http://localhost/servicemodelsamples/service.svc --> 
     <endpoint address="" 
        binding="basicHttpBinding" 
        contract="Microsoft.ServiceModel.Samples.ICalculator" /> 

     <!-- The mex endpoint is explosed at http://localhost/servicemodelsamples/service.svc/mex -->    
     <endpoint address="mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" /> 

     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="SimpleServiceBehavior"> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" /> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
    <system.web> 
    <customErrors mode="Off"/> 
    </system.web> 
</configuration> 
+0

S'il vous plaît essayer Ajouter une application (la réponse de JDC) avant de faire tout cela ... il est beaucoup plus facile et a travaillé pour moi! – JoelFan

4

Pour créer une nouvelle application, cliquez-droit sur le nœud du site Web par défaut. Dans le menu contextuel, sélectionnez Ajouter une application.

1

J'ai eu la même erreur et pour moi, le problème était juste que je manque assemblées sur le serveur qui étaient nécessaires par le service de compiler.

Tout ce qui est décrit ici n'était pas nécessaire pour moi. Pour connaître votre erreur, vous pouvez essayer de déplacer vos fichiers service.svc et service.svc.cs dans le répertoire App_Code. De cette façon, vous obtiendrez un message d'erreur mieux lié à la véritable erreur que vous avez.

Dans mon cas, l'espace de noms qui manquait parce que j'ai oublié de déployer certains assemblys. J'ai téléchargé les assemblages manquants, j'ai exécuté le service correctement puis j'ai reculé les fichiers de services auxquels ils appartenaient.

+0

J'ai eu ce problème aussi. Je devais définir "Copy Local" sur l'un de mes assemblages référencés pour l'inclure avec mon site. – Paul

1

J'ai eu ce problème.

  1. Je gardé les fichiers publiés sous wwwroot
  2. Cliquez sur Parcourir le fichier .svc
  3. Ce jetant même exception

Résolution

  1. J'ai créé un répertoire virtuel pour le même
  2. Essaie Parcourir le fichier .svc.

Working ...

Questions connexes