title: How to implement publish/subscribe communication over the internet
body: <p>I have a .Net service hosted on a server, and .Net clients connecting to this server over the internet.</p>
  
  <p>I want to implement a publish subscribe model where clients can subscribe to events on the service and have data pushed to them as data becomes available. An alternative would be to have clients poll the server for data, however this will likely be too slow for what is required. Hence the need for a publish/subscribe type of communication.</p>
  
  <p>I understand that the WCF binding WSDualHttpBinding does allow this, however it comes with a downside. According to "Programming WCF Services" author Juval Lowy, </p>
  
  <blockquote>
    <p>...the WSDualHttpBinding is mostly
    unusable, since it is practically
    impossible to tunnel through various
    communication barriers separating the
    service from the client and the need
    to find a specific web-server machine
    makes this impractical.</p>
  </blockquote>
  
  <p>I've interpretted this to mean (please correct me if I'm wrong) that to operate with WSDualHttpBinding, it is necessary for clients to open a port on their machines (along with any necessary router configuration) for the server to callback through. If this is the case using WSDualHttpBinding will not be an option for me. Using Windows Azure will also not be an option.</p>
  
  <p>So the crux of my question is, how can I achieve a publish/subscribe/callback type of communication over the internet, without the need to open ports on the client machine? Open standards are ok but unnecessary as client and server are both .Net, Windows Azure is not an option.</p>