Pergunta

I'm in the process of learning WCF, and as a practical exercise I've decided to write generic wrapper for the ServiceHost class. The idea is to have a class like the one below :

public class Host<I(nterface), S(ervice)>
    where S : I, new()
{
    /**/

    ServiceHost mServiceHost;
    S mServiceInstance = new S();
}

Where the I type is the interface with the [ServiceContract] attribute & the S type is the Service that's implementing the forementioned interface.

I've created an auxiliary hello-world type service in the mean time to test my class on the go.

In the Host's constructor I've instantiated the internal ServiceHost like this :

mServiceHost = new ServiceHost(mServiceInstance);

I've added a service endpoint :

mServiceHost.AddServiceEndPoint(typeof(I), new BasicHttpBinding(), new Uri("http://localhost:40000/MyTestService"));

a bit later I've opened the host, launched my application and attempted to see if my browser will indicate a service present under the "http://localhost:40000/MyTestService" - I got a blank page and all attempts to add a service reference failed.

I've later added the same Uri to the ServiceHost's constructor :

mServiceHost = new ServiceHost(mServiceInstance, new Uri("http://localhost:40000/MyTestService"));

That constructor's 2nd argument is either :

params string[] baseAddresses 

or

params Uri[] baseAddresses

In any case, the presence of the "params" keyword tells me that this parameter is OPTIONAL.

I've reacitvated my app, and (using the browser) navigated to the uri. The service page popped up. All in all - it's working but not the way I expected, I seem to be missing something.

Questions :

  1. Why did the service fail when I did not supply the optional baseAddresses parameter in the ServiceHost constructor - while attempting to feed the addresses while adding service endpoints?

  2. Can I achieve my goal "the way I initially wanted it to be" ?

Best regards, and hoping to hear from any WCF experts soon(tm).

Foi útil?

Solução

Greg Sansom answered your first question. As for the second it can be done: please get a look at Juval Lowy's ServiceModelEx classes (especially ServiceHost) download here it contains several useful classes for WCF

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top