我正在学习 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。服务页面弹出。总而言之 - 它正在工作,但不是我预期的方式,我似乎遗漏了一些东西。
问题 :
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?
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).