WCF InProcFactory error

Posted by Terence Lewis on Stack Overflow See other posts from Stack Overflow or by Terence Lewis
Published on 2009-05-15T11:15:28Z Indexed on 2010/05/08 3:58 UTC
Read the original article Hit count: 496

Filed under:
|
|
|
|

I'm using IDesign's ServiceModelEx assembly to provide additional functionality over and above what's available in standard WCF.

In particular I'm making use of InProcFactory to host some WCF services within my process using Named Pipes. However, my process also declares a TCP endpoint in its configuration file, which I host and open when the process starts.

At some later point, when I try to host a second instance of this service using the InProcFactory through the named pipe (from a different service in the same process), for some reason it picks up the TCP endpoint in the configuration file and tries to re-host this endpoint, which throws an exception as the TCP port is already in use from the first hosting.

Here is the relevant code from InProcFactory.cs in ServiceModelEx:

static HostRecord GetHostRecord<S,I>() where I : class
                                       where S : class,I
{
    HostRecord hostRecord;
    if(m_Hosts.ContainsKey(typeof(S)))
    {
        hostRecord = m_Hosts[typeof(S)];
    }
    else
    {
        ServiceHost<S> host;
        if(m_Singletons.ContainsKey(typeof(S)))
        {
            S singleton = m_Singletons[typeof(S)] as S;
            Debug.Assert(singleton != null);
            host = new ServiceHost<S>(singleton,BaseAddress);
        }
        else
        {
           host = new ServiceHost<S>(BaseAddress);
        }    

        string address =  BaseAddress.ToString() + Guid.NewGuid().ToString();

        hostRecord = new HostRecord(host,address);
        m_Hosts.Add(typeof(S),hostRecord);
        host.AddServiceEndpoint(typeof(I),Binding,address);

        if(m_Throttles.ContainsKey(typeof(S)))
        {
           host.SetThrottle(m_Throttles[typeof(S)]);
        }
        // This line fails because it tries to open two endpoints, instead of just the named-pipe one
        host.Open();
    }
    return hostRecord;
}

© Stack Overflow or respective owner

Related posts about wcf

Related posts about inprocfactory

  • WCF InProcFactory error

    as seen on Stack Overflow - Search for 'Stack Overflow'
    I'm using IDesign's ServiceModelEx assembly to provide additional functionality over and above what's available in standard WCF. In particular I'm making use of InProcFactory to host some WCF services within my process using Named Pipes. However, my process also declares a TCP endpoint in its configuration… >>> More