2010-04-29 6 views
12

Ich habe versucht, diesem tutorial zu folgen, um ein WCF-Beispiel für IIS bereitzustellen. Ich kann es nicht zur Arbeit bringen. Dies ist eine gehostete Website, aber ich habe IIS Manager Zugriff auf den Server. In Schritt 2 des Lernprogramms kann ich jedoch nicht "eine neue IIS-Anwendung erstellen, die sich physisch in diesem Anwendungsverzeichnis befindet". Ich kann anscheinend keinen Menüeintrag, keinen Kontextmenüpunkt oder eine neue Anwendung finden. Ich habe überall mit der rechten Maustaste wie verrückt geklickt und kann immer noch nicht herausfinden, wie man eine neue App erstellt. Ich nehme an, das ist wahrscheinlich das Grundproblem, aber ich habe ein paar andere Dinge (unten beschrieben) nur für den Fall, dass das nicht das Problem ist. Hier ist ein Bild von dem, was ich in den IIS-Manager sehen, falls meine Worte es nicht gerecht:Bereitstellen der WCF-Lernprogramm-App auf IIS7: "Der Typ konnte nicht gefunden werden"

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

Dies wird als „Einsatz“ bei http://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svc. Der Fehler sagt:

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. 

ich auch ein virtuelles Verzeichnis (IISHostedCalc) in DotNetPanel zu schaffen versucht, die IISHostedCalcService verweist. Als ich nach http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc navigieren, dann gibt es einen anderen Fehler:

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

Interessanterweise, wenn ich auf dem View-Anwendungen klicken, scheint es wie das virtuelle Verzeichnis ist eine Anwendung (unten im Bild) ... obwohl, wie Laut der obigen Fehlermeldung funktioniert es nicht.

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

Gemäß dem Tutorial, gab es keine Zusammenstellung beteiligt; Ich ließ nur die Dateien auf dem Server als in den Ordner IISHostedCalcService folgen:

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

service.svc enthält:

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

(Ich habe versucht, mit Anführungszeichen um den C# Attribut, da dies ein wenig seltsam aussieht ohne Anführungszeichen, aber es machte keinen Unterschied)

Web.config enthält:

<?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 enthält:

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

Antwort

7

Nun, es scheint, ich habe das zu arbeiten. Ich kann den Eintrag "Anwendung erstellen" im IIS-Manager immer noch nicht finden. Dieser Teil ist irgendwie frustrierend, aber ich bin froh, dass es sowieso funktioniert.

Ich hatte das physische Verzeichnis IISHostedCalcService unter wwwroot erstellen. Das verursachte etwas Verwirrung; es bedeutete, dass http://test.com.cws1.my-hosting-panel.com/IISHostedCalcService/Service.svc fast funktionierte, aber es sollte nicht. Ich habe IISHostedCalcService außerhalb von wwwroot verschoben und jetzt ist der einzige Ort, auf den ich zugreifen kann, http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc.

Dann http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc Zugriff war zu werfen, dass „Diese Sammlung bereits eine Adresse mit Schema http enthält.
Es höchstens eine Adresse pro Schema in dieser Sammlung sein kann.“ Error. Es stellt sich heraus, dass die Lösung darin besteht, der Datei web.config direkt unter dem System Folgendes hinzuzufügen.Servicemodel:

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

Danach bekam ich einen neuen Fehler, wenn ccessing http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/Service.svc: „Der Vertrag Name IMetadataExchange nicht in der Liste der Verträge durch den Dienst CalculatorService umgesetzt gefunden werden kann“. Es stellt sich heraus die Lösung das ist die Datei web.config wie folgt zu ändern (dh, fügen Sie das Verhalten Abschnitt und behaviorConfiguration = „SimpleServiceBehavior“ im Service-Element):

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

Schließlich konnte ich Erstellen Sie Clientproxys, indem Sie in Schritt 5c des Lernprogramms unter http://msdn.microsoft.com/en-us/library/ms733133.aspx auf svcutil unter http://test.com.cws1.my-hosting-panel.com/IISHostedCalc/service.svc?wsdl zeigen. Als ich jedoch den Client ausführte, bekam ich den Fehler "Der Anrufer wurde nicht vom Dienst authentifiziert". Die Lösung hierfür war die einfachste: Ändern Sie einfach binding = "wsHttpBinding" zu binding = "basicHttpBinding" in der Datei web.config des Dienstes und in der Datei web.config des Clients (oder führen Sie nach dem Ändern der Web.config des Dienstes svcutil erneut aus).

Die web.config endete wie folgt aussehen:

<?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

Bitte versuchen Anwendung hinzufügen (JDC Antwort), bevor Sie all dies tun ... es ist viel einfacher und arbeitete für mich! – JoelFan

4

Um eine neue Anwendung, mit der rechten klicken Sie auf den Knoten Standardwebsite zu erstellen. Wählen Sie im Kontextmenü Anwendung hinzufügen.

1

Ich hatte den gleichen Fehler und für mich war das Problem nur, dass ich Assemblys auf dem Server fehlte, die von dem Dienst zum Kompilieren benötigt wurden.

Alles, was hier beschrieben wird, war für mich nicht notwendig.

Um herauszufinden, was Ihr Fehler ist, können Sie versuchen, Ihre Dateien service.svc und service.svc.cs in das Verzeichnis App_Code zu verschieben. Auf diese Weise erhalten Sie eine Fehlermeldung, die besser auf Ihren tatsächlichen Fehler bezogen ist.

In meinem Fall fehlte der Namespace, weil ich vergessen hatte, einige Assemblies bereitzustellen. Ich habe die fehlenden Assemblys hochgeladen, den Dienst ordnungsgemäß ausgeführt und dann die Dienstdateien zurückbewegt, zu denen sie gehörten.

+0

Ich hatte dieses Problem auch. Ich musste "Copy Local" auf einer meiner referenzierten Assemblys festlegen, um sie in meine Site aufzunehmen. – Paul

1

Ich hatte dieses Problem.

  1. Ich hielt veröffentlichten Dateien unter wwwroot
  2. Klicken Sie auf Durchsuchen auf SVC-Datei
  3. Dies wirft gleiche Ausnahme

Auflösung

  1. ich ein virtuelles Verzeichnis für die gleiche
  2. erstellt
  3. Versuche Durchsuchen Sie die .SVC-Datei.

Working ...

Verwandte Themen