Schnelleinstieg zur Problembehandlung in WCFWCF Troubleshooting Quickstart

In diesem Thema wird eine Reihe bekannter Probleme aufgeführt, denen Kunden beim Entwickeln von WCF-Clients und -Diensten begegnet sind.This topic lists a number of known issues customers have run into while developing WCF clients and services. Wenn Ihr spezifisches Problem nicht in dieser Liste enthalten ist, sollten Sie die Ablaufverfolgung für den Dienst konfigurieren.If the issue you are running into is not in this list, we recommend you configure tracing for your service. Dadurch wird eine Ablaufverfolgungsdatei generiert, die Sie im Ablaufverfolgungsdatei-Viewer anzeigen können, um detaillierte Informationen zu Ausnahmen im Dienst zu erhalten.This will generate a trace file that you can view with the trace file viewer and get detailed information about exceptions that may be occurring within the service. Weitere Informationen zum Konfigurieren der Ablaufverfolgung finden Sie unter Configuring Tracing.For more information on configuring tracing, see: Configuring Tracing. Weitere Informationen zum Ablaufverfolgungsdatei-Viewer finden Sie unter Service Trace Viewer Tool (SvcTraceViewer.exe).For more information on the trace file viewer, see: Service Trace Viewer Tool (SvcTraceViewer.exe).

  1. Wenn ich nach dem Installieren von Windows 7 und IIS versuche, auf einen WCF-Dienst zuzugreifen, erhalte ich die folgende Fehlermeldung: HTTP-Fehler 404.3 – Nicht gefunden.After installing Windows 7 and IIS, when I attempt to browse to a WCF service I get the following error message: HTTP Error 404.3 – Not Found

    HTTP Fehler 404.3 – Nicht gefunden. Die angeforderte Seite kann aufgrund einer Konfigurationserweiterung nicht angezeigt werden.HTTP Error 404.3 – Not FoundThe page you are requesting cannot be served because of the extension configuration. Wenn es sich bei der Seite um ein Skript handelt, müssen Sie einen Handler hinzufügen.If the page is a script, add a handler. Wenn die Datei heruntergeladen werden soll, müssen Sie eine MIME-Zuordnung hinzufügen.If the file should be downloaded, add a MIME map. Detaillierte Fehlerinformationen finden Sie unter dem Modul StaticFileModule.Detailed Error InformationModule StaticFileModule.

  2. Manchmal wird eine MessageSecurityException bei der zweiten Anforderung ausgelöst, wenn sich der Client nach der ersten Anforderung eine Weile im Leerlauf befunden hat. Woran liegt das?Sometimes I receive a MessageSecurityException on the second request if my client is idle for a while after the first request. What is happening?

  3. Der Dienst lehnt nach einer Interaktion mit ungefähr 10 Clients weitere Clients ab. Woran liegt das?My service starts to reject new clients after about 10 clients are interacting with it. What is happening?

  4. Kann ich die Dienstkonfiguration aus einer anderen Quelle laden als der Konfigurationsdatei der WCF-Anwendung?Can I load my service configuration from somewhere other than the WCF application’s configuration file?

  5. Dienst und Client funktionieren hervorragend, nicht jedoch, wenn sich der Client auf einem anderen Computer befindet. Woran liegt das?My service and client work great, but I can’t get them to work when the client is on another computer? What’s happening?

  6. Wenn ich auslösen eine FaultException<Ausnahme >, in dem der Typ eine Ausnahme ist, erhält ich immer einen allgemeinen FaultException-Typ auf dem Client und nicht den generischen Typ. Woran liegt das?When I throw a FaultException<Exception> where the type is an exception, I always receive a general FaultException type on the client and not the generic type. What’s happening?

  7. Unidirektionale und Anforderung-Antwort-Vorgänge scheinen nahezu mit der gleichen Geschwindigkeit zurückgegeben zu werden, wenn die Antwort keine Daten enthält. Woran liegt das?It seems like one-way and request-reply operations return at roughly the same speed when the reply contains no data. What's happening?

  8. Ich verwende ein X.509-Zertifikat mit dem Dienst und erhalte eine System.Security.Cryptography.CryptographicException. Woran liegt das?I’m using an X.509 certificate with my service and I get a System.Security.Cryptography.CryptographicException. What’s happening?

  9. Ich habe den ersten Parameter eines Vorgangs von Groß- in Kleinbuchstaben geändert, und der Client löst nun eine Ausnahme aus. Woran liegt das?I changed the first parameter of an operation from uppercase to lowercase; now my client throws an exception. What's happening?

  10. Bei der Verwendung eines meiner Ablaufverfolgungstools wird EndpointNotFoundException ausgelöst. Woran liegt das?I’m using one of my tracing tools and I get an EndpointNotFoundException. What’s happening?

  11. Beim Aufruf einer WCF-Web HTTP-Anwendung aus einer WCF-SOAP-Anwendung gibt der Dienst die folgende Fehlermeldung zurück: 405 "Method Not Allowed"When calling a WCF Web HTTP application from a WCF SOAP application the service returns the following error: 405 Method Not Allowed

Was ist die Basisadresse? Worin besteht die Beziehung zu einer Endpunktadresse?What is the base address? How does it relate to an endpoint address?

Wenn ich nach dem Installieren von Windows 7 und IIS versuche, auf einen WCF-Dienst zuzugreifen, erhalte ich die folgende Fehlermeldung: HTTP-Fehler 404.3 – Nicht gefunden.After installing Windows 7 and IIS, when I attempt to browse to a WCF service I get the following error message: HTTP Error 404.3 – Not Found

Die vollständige Fehlermeldung lautet:The full error message is:

HTTP Fehler 404.3 – Nicht gefunden. Die angeforderte Seite kann aufgrund einer Konfigurationserweiterung nicht angezeigt werden.HTTP Error 404.3 – Not FoundThe page you are requesting cannot be served because of the extension configuration. Wenn es sich bei der Seite um ein Skript handelt, müssen Sie einen Handler hinzufügen.If the page is a script, add a handler. Wenn die Datei heruntergeladen werden soll, müssen Sie eine MIME-Zuordnung hinzufügen.If the file should be downloaded, add a MIME map. Detaillierte Fehlerinformationen finden Sie unter dem Modul StaticFileModule.Detailed Error InformationModule StaticFileModule.

Dieser Fehler tritt auf, wenn "Windows Communication Foundation-HTTP-Aktivierung" nicht explizit in der Systemsteuerung festgelegt ist.This error message occurs when "Windows Communication Foundation HTTP Activation" is not explicitly set in the Control Panel. Um diese Einstellung festzulegen, wechseln Sie zur Systemsteuerung, und klicken Sie in der linken unteren Ecke des Fensters auf "Programme".To set this go to the Control Panel, click Programs in the lower left hand corner of the window. Klicken Sie auf "Windows-Funktionen ein- oder ausschalten".Click Turn Windows features on or off. Erweitern Sie "Microsoft .NET Framework 3.5.1", und wählen Sie "Windows Communication Foundation-Http-Aktivierung" aus.Expand Microsoft .NET Framework 3.5.1 and select Windows Communication Foundation HTTP Activation.

Manchmal wird eine MessageSecurityException bei der zweiten Anforderung ausgelöst, wenn sich der Client nach der ersten Anforderung eine Weile im Leerlauf befunden hat.Sometimes I receive a MessageSecurityException on the second request if my client is idle for a while after the first request. Woran liegt das?What is happening?

Die zweite Anforderung kann in erster Linie aus zwei Gründen fehlschlagen: (1) Das Timeout der Sitzung wurde überschritten. (2) Der Webserver, der diesen Dienst hostet, wird wiederverwendet.The second request can fail primarily for two reasons: (1) the session has timed out or (2) the Web server that is hosting the service is recycled. Im ersten Fall ist die Sitzung so lange gültig, bis das Timeout des Dienstes überschrietten wird. Wenn der Dienst innerhalb des Zeitrahmens, der in der Bindung des Dienstes angegeben ist (ReceiveTimeout) keine Anforderung vom Client erhält, beendet der Dienst die Sicherheitssitzung.In the first case, the session is valid until the service times out. When the service does not receive a request from the client within the period of time specified in the service's binding (ReceiveTimeout), the service terminates the security session. Nachfolgende Clientnachrichten führen zu MessageSecurityException.Subsequent client messages result in the MessageSecurityException. Der Code muss erneut eine Sicherheitssitzung mit dem Dienst herstellen, um weitere Nachrichten senden oder ein Token für den Sicherheitszustandskontext verwenden zu können.The client must re-establish a secure session with the service to send future messages or use a stateful security context token. Token für den Sicherheitszustandskontext sorgen auch dafür, dass eine Sicherheitssitzung das Wiederverwenden eines Webservers überdauert.Stateful security context tokens also allow a secure session to survive a Web server being recycled. Weitere Informationen zur Verwendung von sicherheitszustandskontext in einer sicheren Sitzung finden Sie unter Vorgehensweise: Erstellen Sie ein Sicherheitskontexttoken für eine Sicherheitssitzung.For more information about using stateful secure context tokens in a secure session, see How to: Create a Security Context Token for a Secure Session. Stattdessen können Sie Sicherheitssitzungen auch deaktivieren.Alternatively, you can disable secure sessions. Bei Verwendung der <WsHttpBinding > binden, können Sie festlegen der establishSecurityContext Eigenschaft false um sichere Sitzungen zu deaktivieren.When you use the <wsHttpBinding> binding, you can set the establishSecurityContext property to false to disable secure sessions. Wenn Sie Sicherheitssitzungen für andere Bindungen deaktivieren möchten, müssen Sie eine benutzerdefinierte Bindung erstellen.To disable secure sessions for other bindings, you must create a custom binding. Ausführliche Informationen zum Erstellen einer benutzerdefinierten Bindung finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement.For details about creating a custom binding, see How to: Create a Custom Binding Using the SecurityBindingElement. Bevor Sie eine dieser Optionen anwenden, müssen Sie die Sicherheitsanforderungen der Anwendung kennen.Before you apply any of these options, you must understand your application's security requirements.

Der Dienst lehnt nach einer Interaktion mit ungefähr 10 Clients weitere Clients ab.My service starts to reject new clients after about 10 clients are interacting with it. Woran liegt das?What is happening?

Standardmäßig können Dienste nur 10 Sitzungen gleichzeitig verarbeiten.By default, services can have only 10 concurrent sessions. Wenn die Dienstbindungen Sitzungen verwenden, akzeptiert der Dienst neue Clientverbindungen folglich, bis diese Zahl erreicht ist. Anschließend lehnt er neue Clientverbindungen ab, bis eine der aktuellen Sitzungen beendet wird.Therefore, if the service bindings use sessions, the service accepts new client connections until it reaches that number, after which it refuses new client connections until one of the current sessions ends. Es gibt verschiedene Möglichkeiten, mehr Clients zu unterstützen.You can support more clients in a number of ways. Wenn der Dienst keine Sitzungen erfordert, verwenden Sie keine sitzungsbasierte Bindung.If your service does not require sessions, do not use a sessionful binding. (Weitere Informationen finden Sie unter mit Sitzungen.) Sie können auch das Sitzungslimit erhöhen, indem Sie den Wert der MaxConcurrentSessions-Eigenschaft auf eine Zahl festlegen, die Ihren Anforderungen entspricht.(For more information, see Using Sessions.) Another option is to increase the session limit by changing the value of the MaxConcurrentSessions property to the number appropriate to your circumstance.

Kann ich die Dienstkonfiguration aus einer anderen Quelle laden als der Konfigurationsdatei der WCF-Anwendung?Can I load my service configuration from somewhere other than the WCF application’s configuration file?

Ja. Sie müssen jedoch eine benutzerdefinierte ServiceHost -Klasse erstellen, die die ApplyConfiguration -Methode überschreibt.Yes, however, you have to create a custom ServiceHost class that overrides the ApplyConfiguration method. In dieser Methode können Sie die Basisklasse aufrufen und zuerst die Konfiguration laden (wenn Sie die Standardkonfigurationsinformationen ebenfalls laden möchten). Sie können jedoch auch das gesamte Konfigurationsladesystem ersetzen.Inside that method, you can call the base to load configuration first (if you want to load the standard configuration information as well) but you can also entirely replace the configuration loading system. Falls Sie eine Konfiguration aus einer anderen Konfigurationsdatei als der Anwendungskonfigurationsdatei laden möchten, müssen Sie die Konfigurationsdatei selbst analysieren und die Konfiguration laden.Note that if you want to load configuration from a configuration file that is different from the application configuration file, you must parse the configuration file yourself and load the configuration.

Im folgenden Codebeispiel wird veranschaulicht, wie die ApplyConfiguration -Methode überschrieben und ein Endpunkt direkt konfiguriert wird.The following code example shows how to override the ApplyConfiguration method and directly configure an endpoint.

public class MyServiceHost : ServiceHost  
{  
    public MyServiceHost(Type serviceType, params Uri[] baseAddresses)    
      : base(serviceType, baseAddresses)  
    {
        Console.WriteLine("MyServiceHost Constructor");
    }  

    protected override void ApplyConfiguration()  
    {  
        string straddress = GetAddress();  
        Uri address = new Uri(straddress);  
        Binding binding = GetBinding();  
        base.AddServiceEndpoint(typeof(IData), binding, address);  
    }  

    string GetAddress()  
    {
        return "http://MyMachine:7777/MyEndpointAddress/";
    }  

    Binding GetBinding()  
    {  
        WSHttpBinding binding = new WSHttpBinding();  
        binding.Security.Mode = SecurityMode.None;  
        return binding;  
    }  
}  

Dienst und Client funktionieren hervorragend, nicht jedoch, wenn sich der Client auf einem anderen Computer befindet.My service and client work great, but I can’t get them to work when the client is on another computer? Woran liegt das?What’s happening?

Je nach Ausnahme können verschiedene Probleme vorliegen:Depending upon the exception, there may be several issues:

  • Möglicherweise müssen Sie die Clientendpunktadressen von localhost auf den Hostnamen ändern.You might need to change the client endpoint addresses to the host name and not "localhost".

  • Sie müssen gegebenenfalls den Anschluss zur Anwendung öffnen.You might need to open the port to the application. Weitere Informationen finden Sie unter Firewall Instructions in den SDK-Beispielen.For details, see Firewall Instructions from the SDK samples.

  • Bei anderen möglichen Problemen finden Sie im Thema mit den Beispielen Ausführen der Beispiele in einer Arbeitsgruppe und computerübergreifend.For other possible issues, see the samples topic Running the Samples in a Workgroup and Across Machines.

  • Wenn der Client Windows-Anmeldeinformationen verwendet und es sich bei der Ausnahme um SecurityNegotiationExceptionhandelt, konfigurieren Sie Kerberos wie folgt.If your client is using Windows credentials and the exception is a SecurityNegotiationException, configure Kerberos as follows.

    1. Fügen Sie die Anmeldeinformationen für die Identität dem Endpunktelement in der Datei App.config des Clients hinzu:Add the identity credentials to the endpoint element in the client’s App.config file:

      <endpoint   
        address="http://MyServer:8000/MyService/"   
        binding="wsHttpBinding"   
        bindingConfiguration="WSHttpBinding_IServiceExample"   
        contract="IServiceExample"   
        behaviorConfiguration="ClientCredBehavior"   
        name="WSHttpBinding_IServiceExample">  
        <identity>  
          <userPrincipalName value="name@corp.contoso.com"/>  
        </identity>  
      </endpoint>  
      
    2. Führen Sie den selbst gehosteten Dienst unter dem System- oder dem Netzwerkdienstkonto aus.Run the self-hosted service under the System or NetworkService account. Sie können diesen Befehl ausführen, um unter dem Systemkonto ein Befehlsfenster zu erstellen:You can run this command to create a command window under the System account:

      at 12:36 /interactive "cmd.exe"  
      
    3. Hosten Sie den Dienst unter Internetinformationsdienste (IIS). Standardmäßig wird hier das Dienstprinzipalnamenkonto verwendet.Host the service under Internet Information Services (IIS), which, by default, uses the service principal name (SPN) account.

    4. Registrieren Sie mit SetSPN einen neuen Dienstprinzipalnamen bei der Domäne.Register a new SPN with the domain using SetSPN. Sie müssen dazu ein Domänenadministrator sein.Note that you will need to be a domain administrator in order to do this.

Weitere Informationen zum Kerberos-Protokoll finden Sie unter in WCF verwendete Sicherheitsbegriffe und:For more information about the Kerberos protocol, see Security Concepts Used in WCF and:

Wenn ich auslösen eine FaultException<Ausnahme >, in dem der Typ eine Ausnahme ist, erhält ich immer einen allgemeinen FaultException-Typ auf dem Client und nicht den generischen Typ.When I throw a FaultException<Exception> where the type is an exception, I always receive a general FaultException type on the client and not the generic type. Woran liegt das?What’s happening?

Erstellen Sie unbedingt einen eigenen benutzerdefinierten Fehlerdatentyp und deklarieren Sie ihn als Detailtyp in ihrem Fehlervertrag.It is highly recommended that you create your own custom error data type and declare that as the detail type in your fault contract. Das Problem entsteht, weil Folgendes geschieht, wenn vom System bereitgestellter Ausnahmetypen verwendet werden:The reason is that using system-provided exception types:

  • Eine Typabhängigkeit wird erstellt, die eine der größten Stärken dienstorientierter Anwendungen entfernt.Creates a type dependency that removes one of the biggest strengths of service-oriented applications.

  • Ausnahmen werden nicht notwendigerweise standardmäßig serialisiert.Cannot depend upon exceptions serializing in a standard way. Einige – wie SecurityException– sind vielleicht überhaupt nicht serialisierbar.Some—like SecurityException—may not be serializable at all.

  • Interne Implementierungsdetails werden für Clients verfügbar gemacht.Exposes internal implementation details to clients. Weitere Informationen finden Sie unter angeben und Behandeln von Fehlern in Verträgen und Diensten.For more information, see Specifying and Handling Faults in Contracts and Services.

Wenn Sie eine Anwendung debuggen, können Sie jedoch mit der ServiceDebugBehavior -Klasse Ausnahmeinformationen serialisieren und an den Client zurückgeben.If you are debugging an application, however, you can serialize exception information and return it to the client by using the ServiceDebugBehavior class.

Unidirektionale und Anforderung-Antwort-Vorgänge scheinen nahezu mit der gleichen Geschwindigkeit zurückgegeben zu werden, wenn die Antwort keine Daten enthält.It seems like one-way and request-reply operations return at roughly the same speed when the reply contains no data. Woran liegt das?What's happening?

Einen Vorgang als unidirektional anzugeben, bedeutet, dass der Vorgangsvertrag lediglich eine Eingabenachricht akzeptiert und keine Ausgabenachricht zurückgibt.Specifying that an operation is one way means only that the operation contract accepts an input message and does not return an output message. In WCF zurück allen Clientaufrufe auf, wenn die ausgehenden Daten zur Übertragung geschrieben wurden oder eine Ausnahme ausgelöst.In WCF, all client invocations return when the outbound data has been written to the wire or an exception is thrown. Unidirektionale Vorgänge funktionieren genauso. Außerdem können sie eine Ausnahme auslösen, falls der Dienst nicht gefunden wird, oder sie können blockiert werden, falls der Dienst nicht zur Annahme der Daten aus dem Netzwerk bereit ist.One-way operations work the same way, and they can throw if the service cannot be located or block if the service is not prepared to accept the data from the network. In der Regel führt in WCF, dies zu unidirektionalen aufrufen, die schneller als Anforderung-Antwort an den Client zurückgegeben; aber das Senden der ausgehenden Daten über das Netzwerk verlangsamt jede Bedingung, verlangsamt, unidirektionale Vorgänge ebenso wie Anforderung-Antwort-Vorgänge.Typically in WCF, this results in one-way calls returning to the client more quickly than request-reply; but any condition that slows the sending of the outbound data over the network slows one-way operations as well as request-reply operations. Weitere Informationen finden Sie unter unidirektionaler Services und beim Zugriff auf Dienste, die mithilfe eines WCF-Clients.For more information, see One-Way Services and Accessing Services Using a WCF Client.

Ich verwende ein X.509-Zertifikat mit dem Dienst und erhalte eine System.Security.Cryptography.CryptographicException.I’m using an X.509 certificate with my service and I get a System.Security.Cryptography.CryptographicException. Woran liegt das?What’s happening?

Das Problem tritt in der Regel nach einer Änderung des Benutzerkontos auf, unter dem der IIS-Arbeitsprozess ausgeführt wird.This commonly occurs after changing the user account under which the IIS worker process runs. Wenn Sie in Windows XPWindows XPz. B. das Standardbenutzerkonto, unter dem die Datei Aspnet_wp.exe ausgeführt wird, von ASPNET in ein benutzerdefiniertes Konto ändern, wird dieser Fehler vermutlich angezeigt.For example, in Windows XPWindows XP, if you change the default user account that the Aspnet_wp.exe runs under from ASPNET to a custom user account, you may see this error. Bei der Verwendung eines privaten Schlüssels benötigt der entsprechende Prozess die Berechtigungen für den Zugriff auf die Datei, in der der Schlüssel gespeichert ist.If using a private key, the process that uses it will need to have permissions to access the file storing that key.

In diesem Fall müssen Sie dem Konto des Prozesses Leseberechtigungen für die Datei mit dem Schlüssel erteilen.If this is the case, you must give read access privileges to the process's account for the file containing the private key. Wenn z. B. der IIS-Arbeitsprozess unter dem Konto Bob ausgeführt wird, müssen Sie Bob den Lesezugriff auf die Datei erteilen, die den privaten Schlüssel enthält.For example, if the IIS worker process is running under the Bob account, then you will need to give Bob read access to the file containing the private key.

Weitere Informationen dazu, wie Sie die richtige Benutzerkonto den Zugriff auf die Datei erteilen, die den privaten Schlüssel für ein bestimmtes x. 509-Zertifikat enthält, finden Sie unter Vorgehensweise: Zugänglichmachen von X.509-Zertifikaten für WCF.For more information about how to give the correct user account access to the file that contains the private key for a specific X.509 certificate, see How to: Make X.509 Certificates Accessible to WCF.

Ich habe den ersten Parameter eines Vorgangs von Groß- in Kleinbuchstaben geändert, und der Client löst nun eine Ausnahme aus.I changed the first parameter of an operation from uppercase to lowercase; now my client throws an exception. Woran liegt das?What's happening?

Die Werte der Parameternamen in der Vorgangssignatur sind Teil des Vertrags und werden nach Groß- und Kleinschreibung unterschieden.The value of the parameter names in the operation signature are part of the contract and are case-sensitive. Verwenden Sie das System.ServiceModel.MessageParameterAttribute-Attribut, wenn der lokale Parametername von den Metadaten unterschieden werden muss, die den Vorgang für Clientanwendungen beschreiben.Use the System.ServiceModel.MessageParameterAttribute attribute when you need to distinguish between the local parameter name and the metadata that describes the operation for client applications.

Bei der Verwendung eines meiner Ablaufverfolgungstools wird EndpointNotFoundException ausgelöst.I’m using one of my tracing tools and I get an EndpointNotFoundException. Woran liegt das?What’s happening?

Wenn Sie ein Tool zum verfolgen, die nicht den vom System bereitgestellten WCF-Ablaufverfolgungsmechanismus ist und Sie erhalten eine EndpointNotFoundException , der angibt, dass es ein adressfilterkonflikt aufgetreten, müssen Sie die ClientViaBehavior Klasse, die Nachrichten auf das Ablaufverfolgungstool zu leiten und haben Sie diese Nachrichten an die Dienstadresse weiterleiten.If you are using a tracing tool that is not the system-provided WCF tracing mechanism and you receive an EndpointNotFoundException that indicates that there was an address filter mismatch, you need to use the ClientViaBehavior class to direct the messages to the tracing utility and have the utility redirect those messages to the service address. Die ClientViaBehavior -Klasse ändert den Adressierungsheader Via und gibt die nächste Netzwerkadresse unabhängig vom endgültigen Empfänger an, der mit dem Adressierungsheader To angegeben wird.The ClientViaBehavior class alters the Via addressing header to specify the next network address separately from the ultimate receiver, indicated by the To addressing header. Ändern Sie dabei jedoch nicht die Endpunktadresse, die den To -Wert festlegt.When doing this, however, do not change the endpoint address, which is used to establish the To value.

Das folgende Codebeispiel zeigt eine standardmäßige Konfigurationsdatei für einen Beispielclient.The following code example shows an example client configuration file.

<endpoint   
  address=http://localhost:8000/MyServer/  
  binding="wsHttpBinding"  
  bindingConfiguration="WSHttpBinding_IMyContract"  
  behaviorConfiguration="MyClient"   
  contract="IMyContract"   
  name="WSHttpBinding_IMyContract">  
</endpoint>  
<behaviors>  
  <endpointBehaviors>  
    <behavior name="MyClient">  
      <clientVia viaUri="http://localhost:8001/MyServer/"/>  
    </behavior>  
  </endpointBehaviors>  
</behaviors>  

Was ist die Basisadresse?What is the base address? Worin besteht die Beziehung zu einer Endpunktadresse?How does it relate to an endpoint address?

Eine Basisadresse ist die Stammadresse für eine ServiceHost -Klasse.A base address is the root address for a ServiceHost class. Wenn Sie der Dienstkonfiguration eine ServiceMetadataBehavior -Klasse hinzufügen, werden standardmäßig die WSDL (Web Services Description Language) für alle vom Host veröffentlichten Endpunkte aus der HTTP-Basisadresse und alle relativen Adressen, die für das Metadatenverhalten bereitgestellt werden, sowie "?wsdl" abgerufen.By default, if you add a ServiceMetadataBehavior class into your service configuration, the Web Services Description Language (WSDL) for all endpoints the host publishes are retrieved from the HTTP base address, plus any relative address provided to the metadata behavior, plus "?wsdl". Wenn Sie mit ASP.NETASP.NET und IIS vertraut sind, ist die Basisadresse mit dem virtuellen Verzeichnis vergleichbar.If you are familiar with ASP.NETASP.NET and IIS, the base address is equivalent to the virtual directory.

Gemeinsames Verwenden eines Ports durch einen Dienstendpunkt und einen mex-Endpunkt mithilfe der NetTcpBindingSharing a port between a service endpoint and a mex endpoint using the NetTcpBinding

Wenn Sie die Basisadresse für einen Dienst als net.tcp://MyServer:8080/MyService angeben und die folgenden Endpunkte hinzufügen:If you specify the base address for a service as net.tcp://MyServer:8080/MyService and add the following endpoints:

<services>  
  <service name="Microsoft.Samples.NetTcp.CalculatorService">  
    <endpoint address="calcsvc" binding ="netTcpBinding" contract="Microsoft.Samples.NetTcp.ICalculator"/>  
    <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />  
  </service>  
</services>  

Und wenn Sie eine der NetTcpBinding-Einstellungen wie im folgenden Konfigurationsausschnitt veranschaulicht ändern:And if you modify one of the NetTcpBinding settings as shown in the following configuration snippet:

<bindings>  
  <netTcpBinding>  
    <binding closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="11" maxReceivedMessageSize="65536">  
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>  
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>  
      <security mode="Transport">  
        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>  
      </security>  
    </binding>  
  </netTcpBinding>  
</bindings>  

Sie erhalten eine Fehlermeldung wie folgt: nicht behandelte Ausnahme: System.ServiceModel.AddressAlreadyInUseException: Es ist bereits ein Listener auf IP-Endpunkt 0.0.0.0:9000 Sie diesen Fehler umgehen können, indem Sie eine vollqualifizierte URL mit einem anderen Port für angeben der MEX-Endpunkt wie im folgenden Konfigurationsausschnitt gezeigt:You will see an error like the following: Unhandled Exception: System.ServiceModel.AddressAlreadyInUseException: There is already a listener on IP endpoint 0.0.0.0:9000 You can work around this error by specifying a fully qualified URL with a different port for the MEX endpoint as shown in the following configuration snippet:

<services>  
  <service name="Microsoft.Samples.NetTcp.CalculatorService">  
    <endpoint address="calcsvc" binding ="netTcpBinding" contract="Microsoft.Samples.NetTcp.ICalculator"/>  
    <endpoint address="net.tcp://localhost:9001/servicemodelsamples/mex" binding="mexTcpBinding" contract="IMetadataExchange" />  
  </service>  
</services>  

Beim Aufruf einer WCF-Web HTTP-Anwendung aus einer WCF-SOAP-Anwendung gibt der Dienst die folgende Fehlermeldung zurück: 405 "Method Not Allowed"When calling a WCF Web HTTP application from a WCF SOAP application the service returns the following error: 405 Method Not Allowed

Aufrufen einer WCF-Web-HTTP-Anwendung (ein Dienst, verwendet der WebHttpBinding und WebHttpBehavior) aus einem WCF Service möglicherweise die folgende Ausnahme generieren: Unhandled Exception: System.ServiceModel.FaultException1[System.ServiceModel.ExceptionDetail]: der Remoteserver hat eine unerwartete Antwort zurückgegeben. : (405)-Methode nicht zulässig. "Diese Ausnahme tritt auf, weil WCF den ausgehenden überschreibt OperationContext mit dem eingehenden OperationContext.Calling a WCF Web HTTP application (a service that uses the WebHttpBinding and WebHttpBehavior) from a WCF service may generate the following exception: Unhandled Exception: System.ServiceModel.FaultException1[System.ServiceModel.ExceptionDetail]: The remote server returned an unexpected response: (405) Method Not Allowed.` This exception occurs because WCF overwrites the outgoing OperationContext with the incoming OperationContext. Um dieses Problem zu beheben, erstellen Sie im WCF-Web-HTTP-Dienstvorgang einen OperationContextScope .To solve this problem create an OperationContextScope within the WCF Web HTTP service operation. Zum Beispiel:For example:

public string Echo(string input)  
{  
    using (new OperationContextScope(this.InnerChannel))  
    {  
        return base.Channel.Echo(input);  
    }  
}  

Siehe auchSee Also

Debuggen von Windows-AuthentifizierungsfehlernDebugging Windows Authentication Errors