Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7802077
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 2, 20262026-06-02T01:09:05+00:00 2026-06-02T01:09:05+00:00

I have been using stackoverflow.com as a resource as a professional programmer for years

  • 0

I have been using stackoverflow.com as a resource as a professional programmer for years now. I would say 8 out of 10 times when I search for something on google, I get pointed to a question and answer here, and I am always relieved when that happens, because I know I am about to find the information I need.

I have been pulling my hair out trying to figure (what I think to be) a simple problem out, concerning setting up a routing service using WCF technology. I have browsed through the questions with similar titles here, and I have consulted a great many resources (both actual books on the subject, as well as websites) trying to figure this out, to no avail.

In a nutshell, I want to setup a system with the following layout:

{client}<-basicHTTP->{portal/router}<-fullWCF-WS*->{end-point-services1..n}

client: gets service reference to portal, able to call functions at end-point service
portal/router: gets requests from client, and sends them on to end-point services in a multi-cast setup
end-point-services1..n: gets request from client, routed through portal, processes request to search for things, and either responds, or logs data in a database to be checked later

I am, 100%, able to get a routing service up and running. The most successful models I have been able to follow, were outlined in the “What’s new in WCF4: exercises 8 & 9, content bridging & routing” (msdn.microsoft.com/en-us/gg465212) and “Hello World with the Routing Service” (msdn.microsoft.com/en-us/library/dd795218.aspx) But I have used bits and pieces from all of the sources I have consulted (listed below).

Basically, what is frustrating me, is that I want a client (a 3rd party) to be able to just add a web service reference to the portal service (or, worst case scenario, use the svcutil.exe method), and be done with setup on their part. With that reference, they will have references to all the functions/methods they would want to call in all scenarios. The models I have looked at that do this require 2 references, one to the actual service, and one to the router, and then force the client to specifically call the router in their setup. None of my other attempts to make this particular setup work, have worked.

Your help with this would be greatly appreciated.


Here is a simplified version of my working model that almost is doing what I want:


(note, all services are being hosted in IIS)

PORTAL SERVICE (and IIS Host)

Portal.svc:
<%@ ServiceHost Service="System.ServiceModel.Routing.RoutingService, System.ServiceModel.Routing, version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
Web.config:

<configuration>
  <system.serviceModel>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <bindings>
      ...  
    </bindings>
    <client>
      <endpoint address="http://searcher1/Searcher.svc/general" binding="basicHttpBinding" contract="*" name="regularSearchServiceEndpoint" />
      <endpoint address="http://searcher2/Searcher.svc/general" binding="basicHttpBinding" contract="*" name="regularSearchServiceEndpoint2" />
    </client>
    <behaviors>
      ...
    </behaviors>
    <routing>
      <filters>
        <filter name="MatchAllFilter" filterType="MatchAll" />
      </filters>
      <filterTables>
        <filterTable name="filterTable1">
          <add filterName="MatchAllFilter" endpointName="regularSearchServiceEndpoint" backupList="backupList1" priority="0"/>
        </filterTable>
      </filterTables>
      <backupLists>
        <backupList name="backupList1">
          <add endpointName="regularSearchServiceEndpoint2"/>
        </backupList>
      </backupLists>
    </routing>
    <services>
      <service behaviorConfiguration="routingConfiguration" name="System.ServiceModel.Routing.RoutingService">
        <endpoint address="general" binding="basicHttpBinding" name="routerEndpoint1" contract="System.ServiceModel.Routing.IRequestReplyRouter" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

SEARCH SERVICE

ISearch.cs:

namespace SearchService
{
  [ServiceContract]
  public interface ISearch
  {
    [OperationContract]
    string Ping();
    [OperationContract]
    string searchByInput(string input);
  }
}

App.config:

<configuration>
  <!-- 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>
    <bindings>
      <basicHttpBinding>
        ...
      </basicHttpBinding>
      <customBinding>
        ...
      </customBinding>
    </bindings>
    <client>
      ...
    </client>
    <services>
      <service name="SearchService.Search">
        <endpoint address="general" binding="basicHttpBinding" contract="SearchService.ISearch" name="SearchService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/Design_Time_Addresses/SearchService/Service1/"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

SEARCH SERVICE HOST

Search.svc:
<%@ ServiceHost Service="SearchService.Search" %>
Web.config:

<configuration>
  <system.serviceModel>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <bindings>
      <basicHttpBinding>
        <!--copied over from SearchService.App.config-->
      </basicHttpBinding>
      <customBinding>
        <!--copied over from SearchService.App.config-->
      </customBinding>
    </bindings>
    <client>
      <!--copied over from SearchService.App.config-->
    </client>
    <services>
      ...
    </services>
    <behaviors>
      ...
    </behaviors>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

CLIENT (where it all goes wrong)

Only way I have been able to get it to do what I want, is to add a web service reference to the searcher service (named “remotehost”), and then manually add client endpoints to the app.config file for the router, and force the client code to use that, INSTEAD of the direct link it already has to the searcher

Main.cs:

namespace Client  
{  
  public partial class Main : Form  
  {  
    remotehost.SearchClient proxy;  
    public Main()  
    {  
      InitializeComponent();  
      proxy = new remotehost.SearchClient("RouterService");//("BasicHttpBinding_ISearch")  
    }  
    private void button1_Click(object sender,EventArgs e)  
    {  
      string response = string.Empty;
      //uses method exposed by the SearchService service
      response = proxy.Ping();
      MessageBox.Show("Response from remote service:\n" + response
        "Ping Response",
        MessageBoxButtons.OK,
        MessageBoxIcon.Information);
    }
  }
}

App.config:

<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        ...
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://searcher1/Searcher.svc/general" binding="basicHttpBinding" bindingConfiguration="SearchService" contract="remotehost.ISearch" name="SearchService" />
      <!--I manually added this-->
      <endpoint address="http://portal/Portal.svc/general" binding="basicHttpBinding" contract="remotehost.ISearch" name="RouterService" />
    </client>
  </system.serviceModel>
</configuration>

I want to emphasize, this all WORKS, but it doesn’t work the WAY I want it to. I am fairly certain I can push/pull/cajole this into the elegant setup I am envisioning, but I can’t seem to find a resource or guide that will walk me through it for the first time.

Help?


Sources I have consulted, before coming here:

Learning WCF: A Hands-on Guide, by Bustamante, Michele Leroux {978-0-5961-0162-6} (read cover to cover, and did all exercises)  
Windows Communication Foundation 4: Step By Step {978-0-7356-4556-1} (focused on chapter 14: Discovering Services and Routing Messages)  
msdn.microsoft.com/en-us/library/ms734712.aspx {WCF: Getting Started Tutorial}  
msdn.microsoft.com/en-us/gg465212 {what's new in WCF4: exercises 8 & 9, content bridging & routing}  
codeproject.com/Articles/146835/How-to-create-scalable-services-with-WCF-4-0-Route {How to create scalable services with WCF 4.0 Router and Discovery services}  
msdn.microsoft.com/en-us/library/dd795218.aspx {Hello World with the Routing Service}  
msdn.microsoft.com/en-us/library/ee517421.aspx {routing}  
  msdn.microsoft.com/en-us/library/ee517423.aspx {routing service overview}  
  msdn.microsoft.com/en-us/library/ee517418.aspx {routine service features}  
  msdn.microsoft.com/en-us/library/ee517422.aspx {routing intro}  
  msdn.microsoft.com/en-us/library/ee517420.aspx {routing contracts}  
msdn.microsoft.com/en-us/library/bb332338.aspx {wcf routing}  
msdn.microsoft.com/en-us/library/ms730158.aspx {more wcf routing}  
msdn.microsoft.com/en-us/library/ee354381.aspx {more wcf routing}  
dandcohen.wordpress.com/2010/03/02/wcf-4-routing-service-multicast-sample/ {WCF 4 Routing Service Multicast sample}  

UPDATE: 2012-04-28:

I figured out a way to do what I wanted. It still isn’t as elegant as I wanted, but it get the job done and has allowed me to move forward.

Basically, take the interface from the main service, and implement it in a new service, call it router or portal, or whatever. In the new router/portal service, add a new service reference to the main service.

Now, both services are using the same interface, and have the same signatures for all their methods, so you can then just give the portal/router service wsdl to the 3rd party client, and only allow your portal/router service to communicate with the main service.

Additionally, if you have more than one main service, you can use the portal/router service to decide which of the main services to send requests to, using multiple service references to them, and proxies to send the jobs onward. It works really well.

It is basically a manual front-end routing service, but the beauty is, the detailed work can be done in the main services on a threading model, while the gatekeeping work can be done at the portal/router, so only actual requests are sent to the main services, allowing them to only do work, and the portal services to decide how or if they get that work. The next step I want to add it automatic discovery of new services, but for now, manual configuration is working fine.

I can post the source code for what I came up with, if anyone wants to see it and requests it.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-02T01:09:06+00:00Added an answer on June 2, 2026 at 1:09 am

    The fundamental problem is that the router knows nothing about the service contract that the service is using – it uses a universal contract (one which uses the Message type). Therefore, there is no way for the router to auto-generate the metadata for the client.

    What you will need to do is provide the metadata yourself, maybe as a static WSDL document, with the correct addresses in it and point clients to this

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have been using WPF for a few years now and don't have any
[i meant to ask this question on StackOverflow...] I have been using VisualSVN Server
I have been using Visual Studio integrated with Source Safe for years, when I
I have been using this code with great success to pull out the first
I have been using the CodeIgniter system for a while now - but it
I have been using Weblogic as my company used it. Now I want to
I have been using a noscript tag to show a warning when users have
I have been using the 'Web Site Administration Tool' that you can bring up
I have been using SQL Compare by Redgate at my company and was very
I have been using attachment_fu on a project for a long time and all

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.