Vorgehensweise: Hinzufügen eines ASP.NET AJAX-Endpunkts ohne Verwendung einer Konfiguration

Mit Windows Communication Foundation (WCF) können Sie einen Dienst erstellen, der einen Endpunkt mit ASP.NET AJAX-Aktivierung verfügbar macht, welcher auf einer Clientwebsite über JavaScript aufgerufen werden kann. Zum Erstellen eines solchen Endpunkts können Sie entweder (wie bei allen anderen WCF-Endpunkten) eine Konfigurationsdatei verwenden, oder Sie können eine Methode einsetzen, die keine Konfigurationselemente benötigt. In diesem Thema wird die zweite Methode veranschaulicht.

Um Dienste mit ASP.NET AJAX-Endpunkten ohne Konfiguration zu erstellen, müssen diese Dienste von Internetinformationsdiensten (IIS) gehostet werden. Um mithilfe dieses Ansatzes einen ASP.NET AJAX-Endpunkt zu aktivieren, geben Sie WebScriptServiceHostFactory in der SVC-Datei als Parameter für die Factory in der @ServiceHost-Anweisung an. Diese benutzerdefinierte Factory ist die Komponente, die automatisch einen ASP.NET AJAX-Endpunkt konfiguriert, damit er auf einer Client-Website von JavaScript aufgerufen werden kann.

Ein funktionierendes Beispiel finden Sie unter AJAX-Dienst ohne Konfiguration.

Eine Gliederung zum Konfigurieren eines ASP.NET AJAX-Endpunkts mithilfe von Konfigurationselementen finden Sie unter Gewusst wie: Verwenden der Konfiguration zum Hinzufügen eines ASP.NET AJAX-Endpunkts.

So erstellen Sie einen WCF-Basisdienst

  1. Definieren Sie einen grundlegenden WCF-Dienstvertrag mit einer Schnittstelle, die mit dem Attribut ServiceContractAttribute gekennzeichnet ist. Markieren Sie jeden Vorgang mit OperationContractAttribute. Stellen Sie sicher, dass Sie die Namespace-Eigenschaft festlegen.

    [ServiceContract(Namespace = "MyService")]]  
    public interface ICalculator  
    {  
        [OperationContract]  
        // This operation returns the sum of d1 and d2.  
        double Add(double n1, double n2);  
    
        //Other operations omitted…  
    
    }  
    
  2. Implementieren Sie den ICalculator-Dienstvertrag mit CalculatorService.

    public class CalculatorService : ICalculator  
    {  
        public double Add(double n1, double n2)  
        {  
            return n1 + n2;  
        }  
    
    //Other operations omitted…  
    
  3. Definieren Sie einen Namespace für die ICalculator- und die CalculatorService-Implementierung, indem Sie sie in einen Namespaceblock einschließen.

    Namespace Microsoft.Ajax.Samples  
    {  
        //Include the code for ICalculator and Calculator here.  
    }  
    

So hosten Sie einen Dienst in Internetinformationsdiensten (IIS) ohne Konfiguration

  1. Erstellen Sie eine neue Datei mit einer SVC-Erweiterung in der Anwendung. Bearbeiten Sie diese Datei, indem Sie die entsprechenden @ServiceHost-Anweisungsinformationen für den Dienst hinzufügen. Geben Sie an, dass in der @ServiceHost-Anweisung WebScriptServiceHostFactory verwendet werden soll, um einen ASP.NET AJAX-Endpunkt automatisch zu konfigurieren.

    <%@ServiceHost
        language=c#
        Debug="true"
        Service="Microsoft.Ajax.Samples.CalculatorService"  
        Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory  
    %>  
    
  2. Erstellen Sie den Dienst, und rufen Sie ihn vom Client aus auf. Internetinformationsdienste (IIS) aktiviert den Dienst, sobald er aufgerufen wird. Weitere Informationen zum Hosten in IIS finden Sie unter Gewusst wie: Hosten eines WCF-Diensts in IIS.

So rufen Sie den Dienst auf

  1. Der Endpunkt ist an einer leeren Adresse konfiguriert, die relativ zur SVC-Datei festgelegt ist. Daher ist der Dienst jetzt verfügbar und kann durch Senden von Anforderungen an „service.svc/<Vorgang>“ aufgerufen werden – beispielsweise durch „service.svc/Add“ für den Add-Vorgang. Sie können ihn verwenden, indem Sie die Dienst-URL in die Scripts-Auflistung des ASP.NET AJAX Script Manager-Steuerelements eingeben. Ein Beispiel finden Sie unter AJAX-Dienst ohne Konfiguration.

Beispiel

Der automatisch konfigurierte Endpunkt wird bei einer leeren Adresse relativ zur Basis-URL erstellt. Bei diesem Ansatz wird auch eine Konfigurationsdatei hinzugefügt und verwendet. Wenn die Konfigurationsdatei Endpunktdefinitionen enthält, werden diese Endpunkte dem automatisch konfigurierten Endpunkt hinzugefügt.

Die Datei "service.svc" verwendet beispielsweise die WebScriptServiceHostFactory, und das Dienstverzeichnis enthält eine Web.config-Datei, die mithilfe der BasicHttpBinding einen Endpunkt für den gleichen Dienst definiert, wobei für diesen eine zu "soap" relative Adresse angegeben ist. In diesem Fall enthält der Dienst zwei Endpunkte: einen unter service.svc (der auf ASP.NET AJAX-Anforderungen antwortet) und einen weiteren unter service.svc/soap (der auf SOAP-Anforderungen antwortet).

Definiert die Konfigurationsdatei einen Endpunkt unter einer leeren relativen Adresse und wird WebScriptServiceHostFactory verwendet, wird eine Ausnahme ausgelöst, und der Start des Diensts schlägt fehl.

Sie können die Konfiguration nicht dazu verwenden, Einstellungen auf dem automatisch konfigurierten Endpunkt zu ändern. Muss eine Einstellung (etwa das Readerkontingent) geändert werden, dürfen Sie nicht den konfigurationsfreien Ansatz verwenden, indem Sie WebScriptServiceHostFactory aus der SVC-Datei entfernen und einen Konfigurationseintrag für den Endpunkt einfügen.

Wenn Ihr Dienst den ASP.NET-Kompatibilitätsmodus erfordert – etwa weil er die HttpContext-Klasse oder den ASP.NET-Autorisierungsmechanismus verwendet – ist eine Konfigurationsdatei erforderlich, damit dieser Modus aktiviert werden kann. Das erforderliche Konfigurationselement ist das <serviceHostingEnvironment>-Element, das wie folgt hinzugefügt werden muss.

<system.serviceModel>

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> </system.serviceModel>

Weitere Informationen finden Sie im Thema WCF-Dienste und ASP.NET.

Bei der WebScriptServiceHostFactory-Klasse handelt es sich um eine abgeleitete Klasse von ServiceHostFactory. Eine ausführliche Erläuterung des Diensthostfactory-Mechanismus finden Sie im Thema Erweitern des Hostings mit ServiceHostFactory.

Siehe auch