it-swarm.com.de

AddressFilter stimmt nicht mit dem EndpointDispatcher überein - die Nachricht mit An

Irgendwelche Ideen, wie ich das korrigiere ... einen Dienst über js anrufen

Die Nachricht mit To 'http: //MySite.svc/GetStateXML' kann nicht beim Empfänger verarbeitet werden, da der EndpointDispatcher nicht mit dem AddressFilter übereinstimmt. Überprüfen Sie, ob die EndpointAddresses des Absenders und des Empfängers übereinstimmen

vielen Dank

38
Jon

Ich bin auch nur darauf gestoßen, als ich ein Beispiel im Buch Learning WCF von Bustamante durchgearbeitet habe .. _ Ich hatte den WCF-Konfigurationseditor verwendet, um meine Konfiguration auf meinem Host auszufüllen und den Wert in das Name Attribut für meinen Endpunkt und nicht das Adresse Attribut. Nachdem ich es behoben hatte, funktionierten die Dinge .. Ich fand einen anderen Beitrag, in dem vorgeschlagen wurde:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)] 

auf der Implementierungsklasse, die funktionierte, aber nicht die Hauptursache war.

Die folgende Zeile scheint zu sein: Stellen Sie sicher, dass Ihre Client- und Server-Konfigurationen übereinstimmen.

38
Sean B

Der unten aufgeführte Fehler zeigt an, dass der Webdienst WS-Adressierung implementiert.

"Die Nachricht mit An '' kann nicht am Empfänger verarbeitet werden, da der EndpointDispatcher nicht mit AddressFilter übereinstimmt.

Fügen Sie Folgendes in Ihre SOAP - Header ein, um auf den Webdienst zuzugreifen:

<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:To>http://example.com/service</wsa:To>
</soap:Header>
25

Ich habe diese Fehlermeldung erhalten, während ich webHttpBinding verwendete. 

Ich habe es durch Hinzufügen gelöst

<endpointBehaviors>
  <behavior name="EndPointBehavior">
    <enableWebScript/>
  </behavior>
</endpointBehaviors>

unter <behaviors> und Einstellung behaviorConfiguration="EndPointBehavior" in meiner endpoint mit binding="webHttpBinding".

Vollständige Konfiguration:

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="EndPointBehavior">
      <enableWebScript/>
    </behavior>
  </endpointBehaviors>
</behaviors>

<services>
  <service name="WcfService1.Service1" behaviorConfiguration="ServiceBehavior">
    <endpoint address="" 
              binding="webHttpBinding" 
              contract="WcfService1.IService1" 
              behaviorConfiguration="EndPointBehavior">
    </endpoint>
    <endpoint address="mex" 
              binding="mexHttpBinding" 
              contract="IMetadataExchange">
    </endpoint>
  </service>
</services>

8
SNag

Ich weiß, es klingt albern, aber für alle anderen, die diesen Fehler haben, überprüfen Sie Ihre Adresse. Wir haben diesen Fehler erhalten, weil wir einen doppelten Schrägstrich hatten, wo es nur einen hätte geben sollen. 

http: //localhost//servicename.svc

Die obige Adresse hat das Problem verursacht.

http: //localhost/servicename.svc

Das Problem nicht gezeigt.

Wir haben dynamisch die vollständige Adresse aus Teilen von Daten erstellt, die aus Windows-Formularen und einer Datenbank eingelesen wurden. Der Benutzer hat /servicename.svc anstelle von servicename.svc eingegeben

7
Aaron Havens

Ich hatte das gleiche Problem, nur um vollständig zu sein: 

  • Ich habe Visual Studio 2017 verwendet 
  • Ich musste einen WCF-Dienst in einer alten Anwendung mit .net 3.5 erstellen
  • Es sollte als Seifenservice und als "Rest" -Service angeboten werden

die Konfiguration, die ich verwenden musste (für den Restteil) war: 

es gibt eine Konfiguration für das Dienstverhalten und das Endpunktverhalten

      <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="myServiceBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
       </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webEndpointBehaviour">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <services>
      <service name="My.Service" behaviorConfiguration="myServiceBehaviour">
        <endpoint address="" binding="webHttpBinding" contract="My.IService" behaviorConfiguration="webEndpointBehaviour">
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
0
Cedric Dumont

wenn Sie mehrere Endpunkte in Ihrer WCFService.config haben, wie:

<endpoint address="urn:Service.Test" .../>
<endpoint address="urn:Service.Test2".../>
<Host>
  <baseAddresses>
    <add baseAddress="net.tcp://localhost:1234/Service/" />
    <add baseAddress="http://localhost:1233/Service/" />
    <add baseAddress="net.pipe://localhost/Service/" />
  </baseAddresses>
</Host>

Sie müssen EndpointAddress wie in Ihrer Konfigurationsdatei festlegen. Dann benötigen Sie ClientViaBehavior für die baseAddress.

NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);
EndpointAddress address = new EndpointAddress("urn:Service.Test");
AndonClient client = new AndonClient(binding, address);
client.ChannelFactory.Endpoint.EndpointBehaviors.Add(new ClientViaBehavior(new Uri("net.tcp://localhost:1234/Service/Test")));
var response = client.GetDataAsync().Result;

Für den .net-Core müssen Sie das Verhalten selbst schreiben:

public class ClientViaBehavior : IEndpointBehavior
{
  Uri uri;

  public ClientViaBehavior(Uri uri)
  {
    if (uri == null)
      throw new ArgumentNullException(nameof(uri));

    this.uri = uri;
  }

  public Uri Uri
  {
    get { return this.uri; }
    set
    {
      if (value == null)
        throw new ArgumentNullException(nameof(value));

      this.uri = value;
    }
  }

  public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
  {
  }

  public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
  {
    if (clientRuntime == null)
    {
      throw new ArgumentNullException(nameof(clientRuntime));
    }
    clientRuntime.Via = this.Uri;
  }

  public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
  {
    throw new NotImplementedException();
  }

  void IEndpointBehavior.Validate(ServiceEndpoint serviceEndpoint)
  {
  }
}
0
Jan Magerl

Ich hatte dieses Problem in meiner Entwicklungsumgebung für einen in IIS gehosteten Webdienst. Behebung des Problems unter "IIS-Manager" und fügte dem in der Fehlermeldung beanstandeten Hostnamen eine Bindung hinzu.

0
maets

In meinem Fall habe ich eine WCF-Dienstbibliotheksanwendung, die ein RESTFul und ein Windows-Diensthost ist. Ich hatte ein Problem mit Host App.Config. Siehe unten

WCF Rest Service App.Config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the Host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <services>
      <service name="MyService.DocumentWCFRESTService" behaviorConfiguration="defaultServiceBehavior">
        <!-- Service Endpoints -->
        <!-- Unless fully qualified, address is relative to base address supplied above -->
        <endpoint address="http://localhost:2023/DocumentWCFRESTService" 
                  binding="webHttpBinding" behaviorConfiguration="webBehaviorConfiguration"
                  contract="MyService.IDocumentWCFRESTService" >
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. -->
        <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <Host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8733/Design_Time_Addresses/Document.Server.WCFREST.Service/DocumentWCFRESTService/" />
          </baseAddresses>
        </Host>
      </service>
    </services>
    <serviceHostingEnvironment  multipleSiteBindingsEnabled="true" />
    <bindings> </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="defaultServiceBehavior">
          <!-- To avoid disclosing metadata information, 
          set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="True" httpGetUrl="http://localhost:2023/DocumentWCFRESTService"/>
          <!-- 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>
      <endpointBehaviors>
        <behavior name="webBehaviorConfiguration">
          <webHttp />
        </behavior>
      </endpointBehaviors>

    </behaviors>
  </system.serviceModel>

</configuration>

Windows Service Host App.Config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>

  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpBindingConfiguration" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                        maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                        maxNameTableCharCount="2147483647" />
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>       
        <behavior name="documentWCFRESTServiceBehavior">
          <!-- To avoid disclosing metadata information, 
          set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="True" httpGetUrl="http://localhost:2023/DocumentWCFRESTService"/>
          <!-- 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>


      <endpointBehaviors>
        <behavior name="webBehaviorConfiguration">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <services>      
      <service name="MyService.DocumentWCFRESTService" behaviorConfiguration="documentWCFRESTServiceBehavior">
        <endpoint address="http://localhost:2023/DocumentWCFRESTService" behaviorConfiguration="webBehaviorConfiguration"
                  binding="webHttpBinding" bindingConfiguration="webHttpBindingConfiguration"
                  contract="MyService.IDocumentWCFRESTService"></endpoint>
      </service>
    </services>

  </system.serviceModel>
</configuration>
0
Ziggler

Fügen Sie der Konfig webHttp das Attribut hinzu:

endpointBehaviors
        behavior name ="yourServiceContract"
          webHttp  automaticFormatSelectionEnabled ="true "
        behavior
0
Osamah Allaham