AddressFilter mismatch at the EndpointDispatcher - the msg with To

Wcf

Wcf Problem Overview


Any ideas how I correct this.. calling a service via js

> The message with To 'http://MySite.svc/GetStateXML'; cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree

thanks

Wcf Solutions


Solution 1 - Wcf

I just ran into this as well while going through an example in the Learning WCF book by Bustamante. I had used the WCF Config Editor to fill out my config on my host and had put the value in the name attribute for my endpoint rather than the address attribute. Once I fixed it things worked. I found another post that suggested using:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)] 

on the implementation class, which worked but wasn't the root cause.

Bottom line appears to be: make sure your client and server configs match.

Solution 2 - Wcf

The error listed below indicates that the Web Service implements WS-Addressing.

"The message with To '' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree"

Include the following in your SOAP Headers to access the Web Service:

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

Solution 3 - Wcf

I got this error while I was using webHttpBinding.

I resolved it by adding

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

under <behaviors> and setting behaviorConfiguration="EndPointBehavior" in my endpoint with binding="webHttpBinding".

Full config:

<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>

Solution 4 - Wcf

I know it sounds silly but for anyone else that has this error check your address. We were getting this error because we had a double slash where there should have only been one.

http://localhost//servicename.svc

The above address caused the problem.

http://localhost/servicename.svc

Did not exhibit the problem.

We were dynamically creating the full address from parts of data read in from windows forms and a database. The user was entering /servicename.svc instead of servicename.svc

Solution 5 - Wcf

I had this issue in my development environment for a web service hosted in IIS. Solved it by going to 'IIS Manager' and added a binding to the host name complained about in the error message.

Solution 6 - Wcf

Add webHttp attribute to your config:

endpointBehaviors
        behavior name ="yourServiceContract"
          webHttp  automaticFormatSelectionEnabled ="true "
        behavior

Solution 7 - Wcf

I had the same kind of issue, just to be complete :

  • I used visual studio 2017
  • I needed to create a wcf service on an old application using .net 3.5
  • It should be exposed as a soap service and as a "Rest" service

the configuration that I needed to use (for rest part) was :

there is a config for the service behaviour and the endpoint behaviour

      <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>

Solution 8 - Wcf

In my case I have WCF Service library application which is a RESTFul and Windows Service Host. I had problem with Host App.Config. Please see below

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>

Solution 9 - Wcf

if you have multiple endpoints in your WCFService.config like:

<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>

You need to set EndpointAddress like in your config file. Then you need ClientViaBehavior for the 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;

For .net core you need to write the Behavior by yourself:

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)
  {
  }
}

Solution 10 - Wcf

I had a similar problem.

The following address was provided to the client:

https://test.mycompany.ru/ChannelService/api/connect.svc

But according to the logs, the client sent requests to the following address:

https://test.mycompany.ru/ChannelService/api/connect.svc/SOAP/Adapter

After I added the endpoint address to the configuration file, the service started working:

 <services>
      <service name="connect">
        <endpoint address="/SOAP/Adapter"
				  binding="basicHttpBinding"
				  bindingConfiguration="secureHttpBinding"
				  contract="IContract">   
        </endpoint>

        <endpoint address="mex"
				  binding="mexHttpsBinding"
				  contract="IMetadataExchange"/>
      </service>
    </services>

Solution 11 - Wcf

The key elements are the webHttp and binding="webHttpBinding" for the Json work in the browser test. However SoapUI still failed to return JSon.

Solution 12 - Wcf

Look at <webHttp />

<services>
      <service name="SimpleService.SimpleService" behaviorConfiguration="serviceBehaviour">
        <endpoint address="" binding="webHttpBinding" contract="SimpleService.ISimpleService" behaviorConfiguration="web">
        </endpoint>
        <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange">
        </endpoint>
      </service>
    </services>

....
....

<endpointBehaviors>
        <behavior name="web">
          <webHttp />
        </behavior>
</endpointBehaviors>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJonView Question on Stackoverflow
Solution 1 - WcfSean BView Answer on Stackoverflow
Solution 2 - WcfKishore GuruswamyView Answer on Stackoverflow
Solution 3 - WcfSNagView Answer on Stackoverflow
Solution 4 - WcfAaron HavensView Answer on Stackoverflow
Solution 5 - WcfmaetsView Answer on Stackoverflow
Solution 6 - WcfOsamah AllahamView Answer on Stackoverflow
Solution 7 - WcfCedric DumontView Answer on Stackoverflow
Solution 8 - WcfZigglerView Answer on Stackoverflow
Solution 9 - WcfJan MagerlView Answer on Stackoverflow
Solution 10 - WcfikledsView Answer on Stackoverflow
Solution 11 - WcfJohn FlurkeyView Answer on Stackoverflow
Solution 12 - WcfJaswant AgarwalView Answer on Stackoverflow