1

我正在学习 WCF,作为一个实践练习,我决定为 ServiceHost 类编写通用包装器。这个想法是有一个像下面这样的类:

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

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

其中 I 类型是具有[ServiceContract]属性的接口,而 S 类型是实现上述接口的服务。

同时,我创建了一个辅助的 hello-world 类型服务来随时随地测试我的课程。

在主机的构造函数中,我实例化了内部 ServiceHost,如下所示:

mServiceHost = new ServiceHost(mServiceInstance);

我添加了一个服务端点:

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

过了一会儿,我打开了主机,启动了我的应用程序并尝试查看我的浏览器是否会指示“http://localhost:40000/MyTestService”下存在服务 - 我得到一个空白页面,所有尝试添加一个服务引用失败。

我后来在 ServiceHost 的构造函数中添加了相同的 Uri:

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

该构造函数的第二个参数是:

params string[] baseAddresses 

或者

params Uri[] baseAddresses

无论如何,“params”关键字的存在告诉我这个参数是可选的。

我重新激活了我的应用程序,并且(使用浏览器)导航到了 uri。服务页面弹出。总而言之 - 它正在工作,但不是我预期的方式,我似乎遗漏了一些东西。

问题 :

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

4

1 回答 1

1

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

于 2011-01-03T23:13:37.767 回答