MSMQ-AktivierungMSMQ Activation

Dieses Beispiel veranschaulicht das Hosten von Anwendungen in Windows Process Activation Service (WAS), die von einer Nachrichtenwarteschlange gelesen werden.This sample demonstrates how to host applications in Windows Process Activation Service (WAS) that are read from a message queue. Dieses Beispiel verwendet die netMsmqBinding und basiert auf der bidirektionaler Kommunikation Beispiel.This sample uses the netMsmqBinding and is based on the Two-Way Communication sample. In diesem Fall handelt es sich bei dem Dienst um eine im Internet gehostete Anwendung. Der Client ist selbst gehostet und gibt an die Konsole aus, um den Status eingereichter Bestellungen zu beobachten.The service in this case is a Web-hosted application and the client is self-hosted and outputs to the console to observe the status of purchase orders submitted.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Hinweis

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your computer. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, wechseln Sie zu Windows Communication Foundation (WCF) HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=150780" \t "_blank" "und" Windows Workflow Foundation (WF) Samples for .NET Framework Version 4.NET Framework version 4 alle WCF herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) HYPERLINK "http://go.microsoft.com/fwlink/?LinkId=150780" \t "_blank" and Windows Workflow Foundation (WF) Samples for .NET Framework Version 4.NET Framework version 4 to download all WCF and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\Samples\WCFWFCardSpace\WCF\Basic\Services\Hosting\WASHost\MsmqActivation.<InstallDrive>:\Samples\WCFWFCardSpace\WCF\Basic\Services\Hosting\WASHost\MsmqActivation.

Windows Process Activation Service (WAS), der neue Prozessaktivierungsmechanismus für Windows Server 2008Windows Server 2008, stellt IIS-ähnliche Features bereit, die zuvor nur für HTTP-basierte Anwendungen zur Verfügung standen, die Nicht-HTTP-Protokolle verwenden.Windows Process Activation Service (WAS), the new process activation mechanism for Windows Server 2008Windows Server 2008, provides IIS-like features that were previously only available to HTTP-based applications to applications that use non-HTTP protocols. Windows Communication Foundation (WCF) nutzt die Listeneradapter-Schnittstelle, um aktivierungsanforderungen weiterzugeben, die über die nicht-HTTP-Protokolle unterstützt, die von WCF, z. B. TCP, Named Pipes und MSMQ empfangen werden.Windows Communication Foundation (WCF) uses the Listener Adapter interface to communicate activation requests that are received over the non-HTTP protocols supported by WCF, such as TCP, Named Pipes, and MSMQ. Die Funktionalität für den Empfang von Anforderungen über Nicht-HTTP-Protokolle wird von verwalteten Windows-Diensten gehostet, die in "SMSvcHost.exe" ausgeführt werden.The functionality for receiving requests over non-HTTP protocols is hosted by managed Windows services running in SMSvcHost.exe.

Der Net.Msmq-Listeneradapterdienst (NetMsmqActivator) aktiviert in der Warteschlange befindliche Anwendungen auf der Grundlage von Nachrichten in der Warteschlange.The Net.Msmq Listener Adapter service (NetMsmqActivator) activates queued applications based on messages in the queue.

Der Client sendet Bestellungen aus dem Bereich einer Transaktion an den Dienst.The client sends purchase orders to the service from within the scope of a transaction. Der Dienst empfängt die Bestellungen in einer Transaktion und verarbeitet sie.The service receives the orders in a transaction and processes them. Der Dienst führt dann einen Rückruf an den Client mit dem Status der Bestellung durch.The service then calls back the client with the status of the order. Zur Vereinfachung der bidirektionalen Kommunikation verwenden sowohl der Client als auch der Dienst Warteschlangen für Bestellungen und den Auftragsstatus.To facilitate two-way communication the client and service both use queues to enqueue purchase orders and order status.

Der IOrderProcessor-Dienstvertrag definiert die unidirektionalen Dienstvorgänge, die mit Warteschlangen funktionieren.The service contract IOrderProcessor defines the one-way service operations that work with queuing. Der Dienstvorgang nutzt den Antwortendpunkt, um Bestellstatus an den Client zu senden.The service operation uses the reply endpoint to send order statuses to the client. Die Adresse des Antwortendpunkts ist der URI der Warteschlange, die für die Rücksendung des Auftragsstatus an den Client verwendet wird.The reply endpoint's address is the URI of the queue used to send the order status back to the client. Die Anwendung für die Auftragsverarbeitung implementiert diesen Vertrag.The order processing application implements this contract.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]  
public interface IOrderProcessor  
{  
    [OperationContract(IsOneWay = true)]  
    void SubmitPurchaseOrder(PurchaseOrder po,   
                                           string reportOrderStatusTo);  
}  

Der Antwortvertrag, an den der Bestellstatus gesendet wird, wird vom Client angegeben.The reply contract to send order status to is specified by the client. Der Client implementiert den Auftragsstatusvertrag.The client implements the order status contract. Der Dienst verwendet den generierten Client dieses Vertrags, um den Bestellstatus an den Client zurückzusenden.The service uses the generated client of this contract to send order status back to the client.

[ServiceContract]  
public interface IOrderStatus  
{  
    [OperationContract(IsOneWay = true)]  
    void OrderStatus(string poNumber, string status);  
}  

Der Dienstvorgang verarbeitet die übermittelte Bestellung.The service operation processes the submitted purchase order. OperationBehaviorAttribute wird auf den Dienstvorgang angewendet, um die automatische Eintragung in die Transaktion, die für den Empfang der Nachricht aus der Warteschlange verwendet wird, und die automatische Fertigstellung der Transaktion bei Abschluss des Dienstvorgangs festzulegen.The OperationBehaviorAttribute is applied to the service operation to specify automatic enlistment in the transaction that is used to receive the message from the queue and automatic completion of the transaction on completion of the service operation. Die Orders-Klasse kapselt die Auftragsverarbeitungsfunktion.The Orders class encapsulates order processing functionality. In diesem Fall fügt sie die Bestellung einem Wörterbuch hinzu.In this case, it adds the purchase order to a dictionary. Die Transaktion, in der der Dienstvorgang eingetragen wurde, steht den Vorgängen in der Orders-Klasse zur Verfügung.The transaction that the service operation enlisted in is available to the operations in the Orders class.

Der Dienstvorgang verarbeitet die übermittelte Bestellung und meldet dem Client den Status der Bestellung.The service operation, in addition to processing the submitted purchase order, replies back to the client about the status of the order.

public class OrderProcessorService : IOrderProcessor  
{  
    [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]  
    public void SubmitPurchaseOrder(PurchaseOrder po, string reportOrderStatusTo)  
    {  
        Orders.Add(po);  
        Console.WriteLine("Processing {0} ", po);  
        Console.WriteLine("Sending back order status information");  
        NetMsmqBinding msmqCallbackBinding = new NetMsmqBinding();  
        msmqCallbackBinding.Security.Mode = NetMsmqSecurityMode.None;  
        OrderStatusClient client = new OrderStatusClient(msmqCallbackBinding, new EndpointAddress(reportOrderStatusTo));  
        // please note that the same transaction that is used to dequeue purchase order is used  
        // to send back order status  
        using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))  
        {  
            client.OrderStatus(po.PONumber, po.Status);  
            scope.Complete();  
        }  
    }  

Die zu verwendende Clientbindung wird mithilfe einer Konfigurationsdatei festgelegt.The client binding to use is specified using a configuration file.

Der MSMQ-Warteschlangenname wird im appSettings-Abschnitt der Konfigurationsdatei angegeben.The MSMQ queue name is specified in an appSettings section of the configuration file. Der Endpunkt für den Dienst wird im Abschnitt "System.serviceModel" der Konfigurationsdatei definiert.The endpoint for the service is defined in the System.serviceModel section of the configuration file.

Hinweis

Der Name der MSMQ-Warteschlange und die Endpunktadresse verwenden geringfügig abweichende Adressierungskonventionen.The MSMQ queue name and endpoint address use slightly different addressing conventions. Im MSQM-Warteschlangennamen wird ein Punkt (.) für den lokalen Computer verwendet, und in der Pfadangabe werden umgekehrte Schrägstriche als Trennzeichen verwendet.The MSMQ queue name uses a dot (.) for the local computer and backslash separators in its path. Die WCF-Endpunktadresse gibt ein net.msmq:-Schema an und verwendet "Localhost" für den lokalen Computer sowie Schrägstriche im Pfad.The WCF endpoint address specifies a net.msmq: scheme, uses "localhost" for the local computer, and uses forward slashes in its path. Um aus einer Warteschlange zu lesen, die auf einem Remotecomputer gehostet wird, ersetzen Sie "." und localhost durch den Namen des Remotecomputers.To read from a queue that is hosted on the remote computer, replace the "." and "localhost" to the remote computer name.

Um den Dienstcode in WAS zu hosten, wird eine SVC-Datei mit dem Namen der Klasse verwendet.A .svc file with the name of the class is used to host the service code in WAS.

Die Datei "Service.svc" selbst enthält eine Direktive zur Erstellung von OrderProcessorService.The Service.svc file itself contains a directive to create the OrderProcessorService.

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

Die Datei "Service.svc" enthält darüber hinaus eine Assemblydirektive, um sicherzustellen, dass "System.Transactions.dll" geladen wird.The Service.svc file also contains an assembly directive to ensure that System.Transactions.dll is loaded.

<%@Assembly name="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"%>  

Der Client erstellt einen Geltungsbereich für die Transaktion.The client creates a transaction scope. Die Kommunikation mit dem Dienst findet innerhalb des Geltungsbereichs der Transaktion statt, sodass diese in der Folge als unteilbare Einheit behandelt wird, in der alle Nachrichten entweder erfolgreich sind oder fehlschlagen.Communication with the service takes place within the scope of the transaction, causing it to be treated as an atomic unit where all messages succeed or fail. Für die Transaktion wird ein Commit ausgeführt, indem Complete im Geltungsbereich der Transaktion aufgerufen wird.The transaction is committed by calling Complete on the transaction scope.

using (ServiceHost serviceHost = new ServiceHost(typeof(OrderStatusService)))  
{  
    // Open the ServiceHostBase to create listeners and start listening   
    // for order status messages.  
    serviceHost.Open();  

    // Create a proxy with given client endpoint configuration  
    OrderProcessorClient client = new OrderProcessorClient();  

    // Create the purchase order  
    PurchaseOrder po = new PurchaseOrder();  
    po.CustomerId = "somecustomer.com";  
    po.PONumber = Guid.NewGuid().ToString();  

    PurchaseOrderLineItem lineItem1 = new PurchaseOrderLineItem();  
    lineItem1.ProductId = "Blue Widget";  
    lineItem1.Quantity = 54;  
    lineItem1.UnitCost = 29.99F;  

    PurchaseOrderLineItem lineItem2 = new PurchaseOrderLineItem();  
    lineItem2.ProductId = "Red Widget";  
    lineItem2.Quantity = 890;  
    lineItem2.UnitCost = 45.89F;  

    po.orderLineItems = new PurchaseOrderLineItem[2];  
    po.orderLineItems[0] = lineItem1;  
    po.orderLineItems[1] = lineItem2;  

    //Create a transaction scope.  
    using (TransactionScope scope = new   
        TransactionScope(TransactionScopeOption.Required))  
    {  
        // Make a queued call to submit the purchase order  
        client.SubmitPurchaseOrder(po,   
       "net.msmq://localhost/private/ServiceModelSamplesOrder/OrderStatus");  
        // Complete the transaction.  
        scope.Complete();  
    }  

    //Closing the client gracefully closes the connection and cleans up   
    //resources  
    client.Close();  

    Console.WriteLine();  
    Console.WriteLine("Press <ENTER> to terminate client.");  
    Console.ReadLine();  

    // Close the ServiceHostBase to shutdown the service.  
    serviceHost.Close();  
    }  

Der Clientcode implementiert den IOrderStatus-Vertrag, um den Auftragsstatus vom Dienst zu empfangen.The client code implements the IOrderStatus contract to receive order status from the service. In diesem Fall druckt er den Auftragsstatus aus.In this case, it prints out the order status.

[ServiceBehavior]  
public class OrderStatusService : IOrderStatus  
{  
    [OperationBehavior(TransactionAutoComplete = true,   
                        TransactionScopeRequired = true)]  
    public void OrderStatus(string poNumber, string status)  
    {  
        Console.WriteLine("Status of order {0}:{1} ",   
                                         poNumber , status);  
    }  
}  

Die Auftragsstatuswarteschlange wird in der Main-Methode erstellt.The order status queue is created in the Main method. Die Clientkonfiguration beinhaltet die Dienstkonfiguration für den Auftragsstatus, um den Auftragsstatusdienst zu hosten, wie in der folgenden Beispielkonfiguration dargestellt.The client configuration includes the order status service configuration to host the order status service, as shown in the following sample configuration.

<appSettings>  
    <!-- use appSetting to configure MSMQ queue name -->  
    <add key="targetQueueName" value=".\private$\ServiceModelSamples/service.svc" />  
    <add key="responseQueueName" value=".\private$\ServiceModelSamples/OrderStatus" />  
  </appSettings>  

<system.serviceModel>  

    <services>  
      <service   
         name="Microsoft.ServiceModel.Samples.OrderStatusService">  
        <!-- Define NetMsmqEndpoint -->  
        <endpoint address="net.msmq://localhost/private/ServiceModelSamples/OrderStatus"  
                  binding="netMsmqBinding"  
                  contract="Microsoft.ServiceModel.Samples.IOrderStatus" />  
      </service>  
    </services>  

    <client>  
      <!-- Define NetMsmqEndpoint -->  
      <endpoint name="OrderProcessorEndpoint"  
                address="net.msmq://localhost/private/ServiceModelSamples/service.svc"   
                binding="netMsmqBinding"   
                contract="Microsoft.ServiceModel.Samples.IOrderProcessor" />  
    </client>  

  </system.serviceModel>  

Wenn Sie das Beispiel ausführen, werden die Client- und Dienstaktivitäten sowohl im Server- als auch im Clientkonsolenfenster angezeigt.When you run the sample, the client and service activities are displayed in both the server and client console windows. Sie können sehen, wie der Server Nachrichten vom Client empfängt.You can see the server receive messages from the client. Drücken Sie die EINGABETASTE in den einzelnen Konsolenfenstern, um den Server und den Client zu schließen.Press ENTER in each console window to shut down the server and client.

Der Client zeigt die vom Server gesendeten Bestellstatusinformationen an.The client displays the order status information sent by the server:

Press <ENTER> to terminate client.  
Status of order 70cf9d63-3dfa-4e69-81c2-23aa4478ebed :Pending  

So können Sie das Beispiel einrichten, erstellen und ausführenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass IIS 7.0IIS 7.0 installiert ist, da dies zur WAS-Aktivierung erforderlich ist.Ensure that IIS 7.0IIS 7.0 is installed, as it is required for WAS activation.

  2. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples. Darüber hinaus müssen Sie die WCF-HTTP-Aktivierung-Komponenten installieren:In addition, you must install the WCF non-HTTP activation components:

    1. Aus der starten Menü wählen Systemsteuerung.From the Start menu, choose Control Panel.

    2. Wählen Sie Programme und Funktionen.Select Programs and Features.

    3. Klicken Sie auf Windows-Funktionen ein- oder ausschalten.Click Turn Windows Features on or off.

    4. Klicken Sie unter Featureübersicht, klicken Sie auf Features hinzufügen.Under Features Summary, click Add Features.

    5. Erweitern Sie die Microsoft .NET Framework 3.0 Knoten, und überprüfen Sie die Windows Communication Foundation-nicht-HTTP-Aktivierung Funktion.Expand the Microsoft .NET Framework 3.0 node and check the Windows Communication Foundation Non-HTTP Activation feature.

  3. Um die C#- oder Visual Basic .NET-Edition der Projektmappe zu erstellen, befolgen Sie die unter Building the Windows Communication Foundation Samplesaufgeführten Anweisungen.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  4. Führen Sie den Client aus, indem Sie "client.exe" von einem Befehlsfenster ausführen.Run the client by executing client.exe from a command window. Auf diese Weise wird die Warteschlange erstellt und eine Nachricht an sie gesendet.This creates the queue and sends a message to it. Der Client verbleibt in der Ausführung, um das Ergebnis des Lesens der Nachricht durch den Dienst zu sehen.Leave the client running to see the result of the service reading the message

  5. Der MSMQ-Aktivierungsdienst wird standardmäßig als Netzwerkdienst ausgeführt.The MSMQ activation service runs as Network Service by default. Daher muss die Warteschlange, die zur Aktivierung der Anwendung verwendet wird, über Empfangs- und Einsehberechtigungen für den Netzwerkdienst verfügen.Therefore, the queue that is used to activate the application must have receive and peek permissions for Network Service. Diese können durch Verwendung von Message Queuing MMC hinzugefügt werden:This can be added by using the Message Queuing MMC:

    1. Aus der starten Menü klicken Sie auf ausführen, geben Sie dann Compmgmt.msc und drücken Sie die EINGABETASTE.From the Start menu, click Run, then type Compmgmt.msc and press ENTER.

    2. Klicken Sie unter Dienste und Anwendungen, erweitern Sie Message Queuing.Under Services and Applications, expand Message Queuing.

    3. Klicken Sie auf Private Warteschlangen.Click Private Queues.

    4. Mit der rechten Maustaste in der Warteschlange (servicemodelsamples/Service.svc), und wählen Sie Eigenschaften.Right-click the queue (servicemodelsamples/Service.svc) and choose Properties.

    5. Auf der Sicherheit auf hinzufügen Peek erteilen und Empfangsberechtigungen zu Netzwerkdienst.On the Security tab, click Add and give peek and receive permissions to Network Service.

  6. Konfigurieren Sie den Windows Process Activation Service (WAS), um die MSMQ-Aktivierung zu unterstützen.Configure the Windows Process Activation Service (WAS) to support MSMQ activation.

    Zur Vereinfachung sind die folgenden beiden Schritte in der Batchdatei AddMsmqSiteBinding.cmd implementiert, die sich im Beispielverzeichnis befindet.As a convenience, the following steps are implemented in a batch file called AddMsmqSiteBinding.cmd located in the sample directory.

    1. Zur Unterstützung der net.msmq-Aktivierung muss die Standardwebsite zuerst an das net.msmq-Protokoll gebunden werden.To support net.msmq activation, the default Web site must first be bound to the net.msmq protocol. Sie können hierzu das Tool appcmd.exe verwenden, das mit dem IIS 7.0IIS 7.0-Verwaltungstoolset installiert wird.This can be done using appcmd.exe, which is installed with the IIS 7.0IIS 7.0 management toolset. Führen Sie an einer Eingabeaufforderung auf höherer Ebene (Administrator) den folgenden Befehl aus.From an elevated (administrator) command prompt, run the following command.

      %windir%\system32\inetsrv\appcmd.exe set site "Default Web Site"   
      -+bindings.[protocol='net.msmq',bindingInformation='localhost']  
      

      Hinweis

      Dieser Befehl ist eine einzelne Textzeile.This command is a single line of text.

      Dieser Befehl fügt der Standardwebsite eine net.msmq-Sitebindung hinzu.This command adds a net.msmq site binding to the default Web site.

    2. Alle Anwendungen innerhalb einer Site nutzen zwar eine gemeinsame net.msmq-Bindung, aber jede Anwendung kann die net.msmq-Unterstützung unabhängig von den anderen Anwendungen aktivieren.Although all applications within a site share a common net.msmq binding, each application can enable net.msmq support individually. Um net.msmq für die Anwendung /servicemodelsamples zu aktivieren, führen Sie den folgenden Befehl in einer Eingabeaufforderung auf höherer Ebene (Administrator) aus.To enable net.msmq for the /servicemodelsamples application, run the following command from an elevated command prompt.

      %windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http,net.msmq  
      

      Hinweis

      Dieser Befehl ist eine einzelne Textzeile.This command is a single line of text.

      Dieser Befehl aktiviert die Anwendung/servicemodelsamples darauf zugegriffen werden http://localhost/servicemodelsamples und MSMQ://localhost//servicemodelsamples.This command enables the /servicemodelsamples application to be accessed using http://localhost/servicemodelsamples and net.msmq://localhost/servicemodelsamples.

  7. Falls noch nicht geschehen, stellen Sie sicher, dass der MSMQ-Aktivierungsdienst aktiviert ist.If you have not done so previously, ensure that the MSMQ activation service is enabled. Aus der starten Menü klicken Sie auf ausführen, und geben Services.msc.From the Start menu, click Run, and type Services.msc. Durchsuchen Sie die Liste der Dienste für die Net.Msmq-Listeneradapter.Search the list of services for the Net.Msmq Listener Adapter. Mit der rechten Maustaste, und wählen Sie Eigenschaften.Right-click and select Properties. Festlegen der Starttyp auf automatische, klicken Sie auf übernehmen , und klicken Sie auf die starten Schaltfläche.Set the Startup Type to Automatic, click Apply and click the Start button. Dieser Schritt muss nur einmal vor der ersten Verwendung des Net.Msmq-Listeneradapterdiensts durchgeführt werden.This step must only be done once prior to the first usage of the Net.Msmq Listener Adapter service.

  8. Um das Beispiel in einer Einzelcomputer- oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-computer configuration, follow the instructions in Running the Windows Communication Foundation Samples. Ändern Sie zusätzlich den Code auf dem Client, der die Bestellung einsendet, sodass beim Einsenden der Bestellung der Computername im URI der Warteschlange angegeben wird.Additionally, change the code on the client that submits the purchase order to reflect the computer name in the URI of the queue when submitting the purchase order. Verwenden Sie folgenden Code:Use the following code:

    client.SubmitPurchaseOrder(po, "net.msmq://localhost/private/ServiceModelSamples/OrderStatus");  
    
  9. Entfernen Sie die net.msmq-Sitebindung, die Sie für dieses Beispiel hinzugefügt haben.Remove the net.msmq site binding you added for this sample.

    Zur Vereinfachung sind die folgenden beiden Schritte in einer Batchdatei namens RemoveMsmqSiteBinding.cmd implementiert, die sich im Beispielverzeichnis befindet:As a convenience, the following steps are implemented in a batch file called RemoveMsmqSiteBinding.cmd located in the sample directory:

    1. Entfernen Sie net.msmq aus der Liste der aktivierten Protokolle, indem Sie den folgenden Befehl an einer Eingabeaufforderung auf höherer Ebene (Administrator) ausführen.Remove net.msmq from the list of enabled protocols by running the following command from an elevated command prompt.

      %windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/servicemodelsamples" /enabledProtocols:http  
      

      Hinweis

      Dieser Befehl ist eine einzelne Textzeile.This command is a single line of text.

    2. Entfernen Sie die net.msmq-Sitebindung, indem Sie den folgenden Befehl in einer Eingabeaufforderung auf höher Ebene ausführen.Remove the net.msmq site binding by running the following command from an elevated command prompt.

      %windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" --bindings.[protocol='net.msmq',bindingInformation='localhost']  
      

      Hinweis

      Dieser Befehl ist eine einzelne Textzeile.This command is a single line of text.

    Warnung

    Durch die Ausführung der Batchdatei wird der DefaultAppPool zurückgesetzt und mit .NET Framework, Version 2.0, ausgeführt.Running the batch file will reset the DefaultAppPool to run using .NET Framework version 2.0.

Standardmäßig wird mit der netMsmqBinding-Bindung die Transportsicherheit aktiviert.By default with the netMsmqBinding binding transport, security is enabled. Der Typ der Transportsicherheit wird durch zwei Eigenschaften festgelegt: MsmqAuthenticationMode und MsmqProtectionLevel.Two properties, MsmqAuthenticationMode and MsmqProtectionLevel, together determine the type of transport security. Standardmäßig wird der Authentifizierungsmodus auf Windows festgelegt, und die Schutzebene wird auf Sign gesetzt.By default the authentication mode is set to Windows and the protection level is set to Sign. Damit MSMQ die Authentifizierungs- und Signierungsfunktion bereitstellt, muss es ein Teil einer Domäne sein.For MSMQ to provide the authentication and signing feature, it must be part of a domain. Wenn Sie dieses Beispiel auf einem Computer ausführen, der nicht Teil einer Domäne ist, wird folgende Fehlermeldung ausgegeben: "Das interne Message Queuing-Zertifikat für diesen Benutzer ist nicht vorhanden."If you run this sample on a computer that is not part of a domain, the following error is received: "User's internal message queuing certificate does not exist".

So führen Sie das Beispiel auf einem Computer aus, der zu einer Arbeitsgruppe gehörtTo run the sample on a computer joined to a workgroup

  1. Wenn Ihr Computer nicht zu einer Domäne gehört, deaktivieren Sie die Transportsicherheit, indem Sie den Authentifizierungsmodus und die Schutzebene auf "None" festlegen, wie in der folgenden Beispielkonfiguration gezeigt.If your computer is not part of a domain, turn off transport security by setting the authentication mode and protection level to none as shown in the following sample configuration.

    <bindings>  
        <netMsmqBinding>  
            <binding configurationName="TransactedBinding">  
                <security mode="None"/>  
            </binding>  
        </netMsmqBinding>  
    </bindings>  
    
  2. Ändern Sie die Konfiguration sowohl auf dem Server als auch auf dem Client, bevor Sie das Beispiel ausführen.Change the configuration on both the server and the client before you run the sample.

    Hinweis

    Das Festlegen von security mode auf None entspricht dem Festlegen von MsmqAuthenticationMode, MsmqProtectionLevel und der Message-Sicherheit auf None.Setting security mode to None is equivalent to setting MsmqAuthenticationMode, MsmqProtectionLevel and Message security to None.

  3. Um die Aktivierung auf einem Computer zu ermöglichen, der zu einer Arbeitsgruppe gehört, müssen sowohl der Aktivierungsdienst als auch der Arbeitsprozess mit einem spezifischen Benutzerkonto ausgeführt werden (das gleiche Konto für beide), und die Warteschlange muss über ACLs für das spezifische Benutzerkonto verfügen.To enable activation in a computer joined to a workgroup, both the activation service and the worker process must be run with a specific user account (must be same for both) and the queue must have ACLs for the specific user account.

    So ändern Sie die Identität, unter der der Arbeitsprozess ausgeführt wird:To change the identity that the worker process runs under:

    1. Führen Sie "Inetmgr.exe" aus.Run Inetmgr.exe.

    2. Klicken Sie unter Anwendungspools, mit der rechten Maustaste die AppPool (i. d. r. DefaultAppPool), und wählen Sie Anwendungspoolstandardwerte festlegen... .Under Application Pools, right-click the AppPool (typically DefaultAppPool) and choose Set Application Pool Defaults….

    3. Ändern Sie die Identitätseigenschaften, um das bestimmte Benutzerkonto zu verwenden.Change the Identity properties to use the specific user account.

    So ändern Sie die Identität, unter der der Aktivierungsdienst ausgeführt wird:To change the identity that the Activation Service runs under:

    1. Führen Sie "Services.msc" aus.Run Services.msc.

    2. Mit der rechten Maustaste die Net.MsmqListener-Adapter, und wählen Sie Eigenschaften.Right-click the Net.MsmqListener Adapter, and choose Properties.

  4. Ändern Sie das Konto in der Anmeldung Registerkarte.Change the account in the LogOn tab.

  5. In der Arbeitsgruppe muss der Dienst auch mit einem uneingeschränkten Token ausgeführt werden.In workgroup, the service must also run using an unrestricted token. Führen Sie hierzu in einem Befehlsfenster Folgendes aus:To do this, run the following in a command window:

    sc sidtype netmsmqactivator unrestricted  
    

Siehe auchSee Also

AppFabric-Hosting und PersistenzbeispieleAppFabric Hosting and Persistence Samples