繁体   English   中英

自托管WCF服务-令人困惑的行为

[英]Self hosted WCF service - confusing behavior

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

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

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

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

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

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

mServiceHost = new ServiceHost(mServiceInstance);

我添加了一个服务端点:

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

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

稍后,我将相同的Uri添加到ServiceHost的构造函数中:

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

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

params string[] baseAddresses 

要么

params Uri[] baseAddresses

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

我重新启动了我的应用程序,并(使用浏览器)导航到了uri。 弹出服务页面。 总而言之-它正在工作,但不是我期望的那样,我似乎缺少了一些东西。

问题:

  1. 当我在ServiceHost构造函数中未提供可选的baseAddresses参数时,为什么在添加服务端点时尝试提供地址时服务失败?

  2. 我能否实现“我最初希望的样子”的目标?

致以最诚挚的问候,希望很快能收到任何WCF专家的意见。

格雷格·桑索姆(Greg Sansom)回答了您的第一个问题。 至于第二个可以完成:请查看Juval Lowy的ServiceModelEx类(尤其是ServiceHost), 在这里下载它包含几个对WCF有用的类

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM