Teilen über


Überlegungen beim Veröffentlichen von WCF-Diensten mit den WCF-Empfangsadaptern

Dieses Thema enthält Informationen, die beim Veröffentlichen von WCF-Diensten mit den WCF-Empfangsadaptern berücksichtigt werden sollten. Wenn Sie einen Dienst mit einem WCF-Adapter veröffentlichen, kann dieser wie ein normaler WCF-Dienst von einem WCF-Client aufgerufen werden.

Hosting vom Typ „In-Process“

Das Hosten des Empfangsspeicherorts innerhalb des BizTalk Server Prozessbereichs btsntsvc.exe ermöglicht die Vorteile einer vereinfachten Entwicklung und Bereitstellung. Darüber hinaus werden mehr Hostinstanzen als das Hosten in IIS erstellt, um die Hochverfügbarkeits- und Lastenausgleichsfunktionen von BizTalk Server zu nutzen. Informationen zum Hosten außerhalb des BizTalk Server-Prozesses in IIS finden Sie unter Konfigurieren von IIS für die isolierten WCF-Empfangsadapter.

Legen Sie die Eigenschaft IsOneWay von mit den WCF-Adaptern (außer dem WCF-NetMsmq-Empfangsadapter) auf false fest.

Die System.ServiceModel.OperationContractAttribute.IsOneWay-Eigenschaft von WCF-Diensten, die mit den WCF-Adaptern veröffentlicht wurden – mit Ausnahme von Diensten, die mit dem WCF-NetMsmq Empfangsadapter veröffentlicht wurden, bei denen er auf true festgelegt ist – ist selbst für die unidirektionalen Empfangsspeicherorte auf false festgelegt. Wenn die IsOneWay-Eigenschaft auf false festgelegt ist, werden auch Methoden, die ein Void zurückgeben, in einer Antwortnachricht angezeigt. In diesem Fall erstellt und sendet die Infrastruktur eine leere Nachricht, um dem Aufrufer mitzuteilen, dass die Methode einen Wert zurückgegeben hat. Bei dieser Vorgehensweise kann die Infrastruktur vom Dienstvorgang ausgelöste Ausnahmen zurück zum Client senden.

Um WCF-Dienste zu nutzen, die mit den WCF-Adaptern veröffentlicht wurden (mit Ausnahme des WCF-NetMsmq Empfangsadapters), in denen IsOneWayauf false festgelegt ist, muss die IsOneWay-Eigenschaft auf der Clientseite wie folgt auf false festgelegt werden:

[ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    [OperationContract(IsOneWay=false, ReplyAction="*",Action="…"]
    string SampleMethod(string msg);
}

Hinweis

Da der Standardwert der IsOneWay-Eigenschaftfalse ist, müssen Sie die Eigenschaft nicht im Code angeben.

Auf Clientseite sollte die Eigenschaft ReplyAction von OperationContractAttribute auf „*“ (Sternchen) eingestellt werden, wenn WCF-Dienste mit unidirektionalen Empfangsspeicherorten verarbeitet werden.

Die System.ServiceModel.OperationContractAttribute.ReplyAction-Eigenschaft von System.ServiceModel.OperationContractAttribute kann clientseitig verwendet werden, um den Wert der SOAP-Aktion für die Antwortnachrichten von WCF-Diensten anzugeben.

Außer einem bestimmten Wert für den Aktionsheader der Antwortnachricht (die den Client darauf hinweist, dass dies eine Antwort ist und, welche Aktion erforderlich ist), können Sie auch die Zeichenfolge „*“ (Sternchen) angeben. Durch die Angabe eines Sternchens in einer Clientanwendung wird der Client angewiesen, die Antwortaktion in Antwortnachrichten des Dienstes nicht zu überprüfen.

Um einen WCF-Dienst zu nutzen, der von einem unidirektionierten Empfangsspeicherort veröffentlicht wurde, muss die Proxymethode für den WCF-Dienst void zurückgeben. In diesem Fall erwartet die Proxymethode, dass der WCF-Dienst eine leere Nachricht sendet, um dem Aufrufer mitzuteilen, dass die Methode zurückgegeben wurde. Damit die Proxymethode diese leere Nachricht empfängt, sollte die ReplyAction-Eigenschaft von OperationContractAttribute wie folgt auf "*" (ein Sternchen) festgelegt werden:

[ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    [OperationContract(IsOneWay=false, ReplyAction="*",Action="…"]
    string SampleMethod(string msg);
}

Hinweis

Sie müssen die ReplyAction-Eigenschaft für den WCF-NetMsmq-Adapter nicht auf "*" (sternchen) festlegen, da der WCF-NetMsmq-Adapter erfordert, dass die WCF-Clients die IsOneWay-Eigenschaft auf true festlegen.

Eine isolierte Hostinstanz kann nur einen Adapter ausführen

Eine isolierte Hostinstanz kann nur einen Adapter ausführen. Wenn Sie die Empfangshandler mehrerer isolierter Adapter wie HTTP-, SOAP- und WCF-Adapter mit einem isolierten Host konfigurieren, müssen Sie mehrere Anwendungspools erstellen (einen Anwendungspool pro Adapter). Weitere Informationen zu isolierten BizTalk-Hosts finden Sie unter Aktivieren von Webdiensten.

Verwenden Sie die Option Vorlage - Inhalt wird durch Vorlage festgelegt, wenn Sie XML-fremden Inhalt als Antwortnachricht senden

Die WCF-Adapter mit Text - BizTalk-Antworttext (Standardwert) lassen das Senden von Nicht-XML-Nachrichten wie Zeichendaten und Bitmapbildern nicht zu. Sie können die Option Vorlage – durch Vorlage angegebene Inhalte für die WCF-Adapter verwenden, um Nicht-XML-Nachrichten zu senden. Weitere Informationen zur Verwendung der Vorlage finden Sie unter Angeben des Nachrichtentexts für die WCF-Adapter.

Einrichten der Berechtigungen für einen mit dem Assistenten für BizTalk WCF-Dienstpublishing veröffentlichten WCF-Dienst

Bei Verwendung ASP.NET Anwendungen, die mit dem WCF-Dienstveröffentlichungs-Assistenten auf der Windows Server 2008 SP2- oder Windows Server 2008 R2-Plattform erstellt wurden, können Fehler im Zusammenhang mit dem Zugriff auf DLLs während des WCF-Dienstaufrufs auftreten. Diese Fehler beziehen sich in der Regel auf Probleme mit der Standardsicherheit von Windows Server 2008 SP2 und Windows Server 2008 R2. Weitere Informationen zu diesen Fehlern finden Sie im Microsoft-Hilfe- und Supportartikel "Sie erhalten einen System.IO.FileNotFoundException-Fehler, wenn die Clientanwendung einen Webdienst aufruft" auf der Hilfe- und Supportwebsite unter https://go.microsoft.com/fwlink/?LinkId=43659.

BizTalk Server erfordert, dass dem Prozess, der den WCF-Dienst ausführt, die entsprechenden Berechtigungen erteilt werden, unabhängig davon, ob der Dienst von einem Prozesshost oder einem isolierten Host ausgeführt wird. Unter Windows Server 2008 SP2 und Windows Server 2008 R2 ist die Windows-Standardgruppe für isolierte Hosts die Gruppe isolierter Hostbenutzer, sodass das Hinzufügen der Berechtigungen zur Gruppe isolierter Hostbenutzer dieses Problem beheben sollte.

So fügen Sie die Berechtigungen zur „Benutzergruppe isolierter BizTalk-Hosts“ hinzu

  1. Wechseln Sie in Microsoft Windows Explorer zum Verzeichnis %windir%\temp.

  2. Klicken Sie mit der rechten Maustaste auf %windir%\temp, und klicken Sie dann auf Eigenschaften.

  3. Klicken Sie im Dialogfeld Eigenschaften auf die Registerkarte Sicherheit.

  4. Klicken Sie auf Hinzufügen, wählen Sie die Gruppe Isolierte Hostbenutzer aus, und klicken Sie dann auf OK.

Einrichten der Berechtigungen für einen WCF-Empfangsspeicherort mit dem WCF-NetMsmq-Adapter

Wenn ein WCF-Client, der NetMsmqBinding verwendet, eine Nachricht an einen mit dem WCF-NetMsmq-Adapter veröffentlichten WCF-Dienst sendet, adressiert er diese Nachricht an die Zielwarteschlange, also die Warteschlange, die vom Warteschlangen-Manager des Diensts verwaltet wird. Der Warteschlangen-Manager auf dem Client sendet die Nachricht an eine Übertragungswarteschlange (auch: Ausgangswarteschlange). Die Übertragungswarteschlange ist eine Warteschlange des clientseitigen Warteschlangen-Managers, in der Nachrichten für die Übertragung an die Zielwarteschlange gespeichert werden.

Der Warteschlangen-Manager des Diensts akzeptiert an seine Zielwarteschlangen adressierte Nachrichten und speichert sie. Danach sendet der Dienst Leseanforderungen für die Zielwarteschlange, und der Warteschlangen-Manager übermittelt die Nachrichten an den Dienst. Aus diesem Grund sollte das Dienstkonto für die BizTalk-Hostinstanz, die den Empfangsspeicherort hostet, zum Lesen aus der Zielwarteschlange berechtigt sein.

Verwenden Sie einen leeren Textpfadausdruck für den Empfang einer SOAP-Nachricht mit Zeichendaten im Inhalt des SOAP-Textkörperelements.

Damit ein WCF-Empfangsadapter eine BizTalk-Nachricht aus einer eingehenden Antwortnachricht mit Zeichendaten im Inhalt des SOAP Body-Elements erstellt, wie im folgenden Beispiel gezeigt, sollten Sie das Textfeld Textpfadausdruck auf der Registerkarte Nachricht im Dialogfeld WCF-Adaptertransporteigenschaften leer lassen.

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
    <s:Header>
      ...
    </s:Header>
    <s:Body>Contoso</s:Body>
</s:Envelope>

Wenn Sie die Option Umschlag oder Text auswählen, kann der Adapter die BizTalk-Nachricht aus der vorherigen eingehenden Nachricht nicht erstellen. Die Nachricht wird nicht angehalten, da Nachrichten, die bei der eingehenden SOAP-Marshallingverarbeitung fehlschlagen, nicht angehalten werden. Weitere Informationen zur Verwendung des Textpfadausdrucks auf der Registerkarte Nachricht finden Sie unter Angeben des Nachrichtentexts für die WCF-Adapter.

Hinweis

Sie können das TraceViewer-Tool (SvcTraceViewer.exe) im Windows SDK verwenden, indem Sie die datei BTSNTSvc.exe.config.file konfigurieren. Weitere Informationen zum Windows SDK finden Sie unter "Neuerungen im Windows SDK" unter https://go.microsoft.com/fwlink/?LinkId=75219. Weitere Informationen zum TraceViewer-Tool finden Sie unter "TraceViewer Tool (SvcTraceViewer.exe)" unter https://go.microsoft.com/fwlink/?LinkId=75218.

Verwenden von Schemas, die auf andere Schemas verweisen

Sie können elemente neu definieren, einschließen und importieren, wenn Ihre Schemas groß und komplex werden oder wenn die Schemas, die Ihre verschiedenen Typen von instance Nachrichten darstellen, einige Teile gemeinsam haben. Es kann sinnvoll sein, kleinere Schemas in die Schemas zu integrieren, die letztendlich die Struktur der Instanznachrichten definieren, die Sie mit Ihren Handelspartnern austauschen möchten. Sie können diese Schemas mithilfe des Assistenten für BizTalk WCF-Dienstpublishing als WCF-Dienste veröffentlichen.

Verwenden Sie den Verarbeitungs-Assistenten für BizTalk-WCF-Dienste zum Erstellen der BizTalk-Elemente, die zum Verarbeiten der WCF-Dienste innerhalb eines BizTalk-Projekts erforderlich sind. Wenn die WCF-Dienste innerhalb einer .NET-Anwendung verarbeitet werden sollen, verwenden Sie das ServiceModel Metadata Utility-Tool (Svcutil.exe) zum Erstellen der Proxyklasse für die WCF-Dienste. Weitere Informationen zur Verwendung von Schemas, die auf andere Schemas verweisen, finden Sie unter Schemas, die andere Schemas verwenden , und Gewusst wie: Erstellen von Schemas, die andere Schemas verwenden. Weitere Informationen zu Svcutil.exe finden Sie unter "Service Model Metadata Utility Tool (Svcutil.exe)" unter https://go.microsoft.com/fwlink/?LinkID=74696.

In der folgenden Tabelle werden die Einschränkungen und Überlegungen aufgeführt, die Ihnen bei der Verarbeitung veröffentlichter WCF-Dienste mit Schema, die andere Schemas nutzen, bekannt sein sollten.

XML-Schemaelement Verarbeiten von WCF-Diensten, die mit dem Assistenten für BizTalk WCF-Dienstpublishing veröffentlicht wurden Verarbeiten von WCF-Diensten, die von .NET-Anwendungen gehostet werden
<import> Wird sowohl vom Verarbeitungs-Assistenten für BizTalk-WCF-Dienste als auch von Svcutil.exe unterstützt Wird sowohl vom Verarbeitungs-Assistenten für BizTalk-WCF-Dienste als auch von Svcutil.exe unterstützt
<include> Unterstützt sowohl mit dem BizTalk WCF-Dienstverbrauchs-Assistenten als auch mit Svcutil.exe Hinweis: Svcutil.exe kann beim Erstellen der Proxyklasse eine Warnmeldung auslösen. Unterstützt sowohl mit dem BizTalk WCF-Dienstverbrauchs-Assistenten als auch mit Svcutil.exe Hinweis: Svcutil.exe kann beim Erstellen der Proxyklasse eine Warnmeldung auslösen.
<Neu definieren> – Unterstützt mit dem BizTalk WCF-Dienstverbrauchs-Assistenten
- Eingeschränkte Unterstützung durch Svcutil.exe Hinweis: Svcutil.exe hat die gleiche Einschränkung für das element redefine wie XSD.exe.
Unterstützt sowohl mit dem BizTalk WCF-Dienstverbrauchs-Assistenten als auch mit Svcutil.exe Hinweis: Svcutil.exe kann beim Erstellen der Proxyklasse eine Warnmeldung auslösen.

Hinweis

Svcutil.exe kann beim Erstellen der Proxyklasse für den veröffentlichten BizTalk WCF-Dienst mit den Schemas mithilfe der Include - und Neudefinitionselemente eine Warnmeldung auslösen. Die Warnung lautet beispielsweise: „Das globale Element wurde bereits deklariert.“

Sicherstellen, dass ein In-Process-WCF-Empfangsspeicherort nach dem Ändern des Computernamens in seiner Dienstendpunktadresse nicht deaktiviert ist

Wenn Sie den Computernamenteil im Textfeld Adresse (URI) eines laufenden WCF-Empfangsspeicherorts ändern, wird empfohlen, die BizTalk-Verwaltungskonsole zu verwenden, um zu überprüfen, ob der Empfangsspeicherort noch ausgeführt wird. Wenn Sie beispielsweise eine Dienstendpunktadresse mithilfe des WCF-NetTcp Empfangsadapters net.tcp://<Ihr Computername>/samplepath in net.tcp://localhost/samplepath ändern, kann der Empfangsspeicherort mit einer Service.InvalidOperationException deaktiviert werden. Wenn Sie nur den Computernamen in der Dienstendpunktadresse ändern, den Pfad aber unverändert lassen, vergewissern Sie sich, ob der Empfangsspeicherort noch aktiviert ist, und aktivieren ihn ggf.

Festlegen der geeigneten Optionen für die MSDTC-Sicherheitskonfiguration auf Clientcomputern, die über ein Transaktionsprotokoll mit Remote-WCF-Empfangsspeicherorten kommunizieren

WCF-NetTcp, WCF-WSHttp und WCF-NetNamedPipe Empfangsadapter können an Transaktionskoordinationsprozessen teilnehmen, die WCF-Clients mit den Transaktionsprotokollen WS-AtomicTransaction und OleTransaction verwalten. Bei Verwendung der Transaktionsprotokolle können Nachrichten an die als Ziele angegebenen Empfangsspeicherorte übertragen und aus der MessageBox-Datenbank in einem Transaktionskontext gelöscht werden.

Für die Kommunikation mit WCF-Remote-Empfangsspeicherorten mithilfe der Transaktionsprotokolle müssen Sie die MSDTC-Sicherheitskonfigurationsoptionen auf WCF-Clientcomputern entsprechend konfigurieren. In der folgenden Tabelle sind die erforderlichen Werte für die Optionen aufgeführt, die im Dialogfeld MSDTC-Sicherheitskonfiguration verfügbar sind:

Konfigurationsoption Standardwert Empfohlener Wert
DTC-Netzwerkzugriff Disabled Aktiviert
Ausgehende zulassen Disabled Aktiviert
Gegenseitige Authentifizierung erforderlich Aktiviert Aktiviert, wenn an den entsprechenden Remote-Empfangsstandorten Windows Server 2003 SP1 oder SP2 ausgeführt wird und die gegenseitige Authentifizierung erforderlich ist.
Authentifizierung des eingehenden Anrufers erforderlich Disabled Aktiviert, wenn MSDTC in einem Cluster ausgeführt wird

Wenn Sie diese Änderungen vorgenommen haben, müssen Sie den MSDTC-Dienst neu starten.

Führen Sie die folgenden Schritte aus, um auf das Dialogfeld MSDTC-Sicherheitskonfiguration zuzugreifen:

  1. Klicken Sie auf Start, klicken Sie auf Ausführen, und geben Sie dcomcnfg ein, um die Verwaltungskonsole für Komponentendienste zu starten.

  2. Erweitern Sie Komponentendienste, erweitern Sie Computer, klicken Sie mit der rechten Maustaste auf Arbeitsplatz, und klicken Sie dann auf Eigenschaften.

  3. Klicken Sie im Dialogfeld Meine Computereigenschaften auf die Registerkarte MSDTC , und klicken Sie dann auf Sicherheitskonfiguration , um das Dialogfeld Sicherheitskonfiguration anzuzeigen.

Erklärung des SOAP-Wrappers bei Verwendung des Assistenten für BizTalk WCF-Dienstpublishing

Wenn eine Orchestrierung mithilfe des WCF-Dienstveröffentlichungs-Assistenten als Wcf-Dienst (Windows Communication Foundation) verfügbar gemacht wird, wird ein Wrapper generiert. Dieser Wrapper verwendet den Methodennamen des Ports in der XML-Nachricht, an den die Nachricht gesendet wird. Dieser Wrapper ist der Standard für Microsoft SOAP-Umschläge. Dadurch kann WCF die mehrteilige SOAP-Nachricht in einer WCF-Nachricht umschließen, die vom Adapter an den Endpunkt übertragen wird.

Als bewährte Methode sollte entweder der Absender einen Wrapper verwenden und der Empfänger sollte ihn erwarten, oder der Absender sollte keinen Wrapper verwenden, und der Empfänger sollte die unformatierte WCF-Nachricht erwarten. Wird die Wrapperverwendung bzw. -nichtverwendung nicht bereits im Voraus abgestimmt, kann dies zu Kompatibilitätsproblemen bei der Datenübertragung führen.