在学习WCF的教程时遇到EndpointNotFoundException问题

5
我正在学习《学习 WCF》这本书,目前在第一个教程实验HelloIndigo中遇到了以下错误:

无法连接到http://localhost:8000/HelloIndigo/HelloIndigoService。TCP 错误代码为 10061:由于目标计算机积极拒绝,无法建立连接 127.0.0.1:8000。

此错误出现在客户端项目的 string s = proxy.HelloIndigo(); 这一行。
EndpointAddress ep = new EndpointAddress("http://localhost:8000/HelloIndigo/HelloIndigoService");

IHelloIndigoService proxy = ChannelFactory<IHelloIndigoService>.
            CreateChannel(new BasicHttpBinding(), ep);
string s = proxy.HelloIndigo();
Console.WriteLine(s);
Console.WriteLine("Press <ENTER> to terminate Client");
Console.ReadLine();

我在Google上进行了深入的搜索,但并没有更加明确的答案。

有人能解释一下这个问题以及如何解决吗?

2个回答

3

可能有几个原因,首先需要检查以下几点:

  • 服务是否正在运行?
  • 是否配置了指向该地址的终端节点?
  • 是否有任何防火墙阻止请求?

尝试将终端节点地址放入浏览器中,看是否可以浏览到它。


@Shiraz- 如果我在浏览器中输入端点地址,我会收到一个空白页面 - 如果我将URL缩短为http://localhost:8000/HelloIndigo,我会收到:这是Windows©通信基础结构服务。此服务的元数据发布当前已禁用等... - Nicholas Murray
@Shiraz - 如果我尝试将服务引用添加到另一个项目中,我会收到以下错误信息:无法下载'http://localhost:8000/HelloIndigo/HelloIndigoService'。请求失败,HTTP状态码为400:Bad Request。元数据包含无法解析的引用:'http://localhost:8000/HelloIndigo/HelloIndigoService'。服务不支持内容类型application/soap+xml; charset=utf-8。客户端和服务绑定可能不匹配。等等。 - Nicholas Murray
为了添加服务引用,您必须启用元数据交换,在mex标记中完成。 - Shiraz Bhaiji
@Shiraz 谢谢,有没有办法测试你列出的要点? - Nicholas Murray
@Shiraz - 我已经弄清楚了 - Host 项目和客户端项目在同一个解决方案中,当然我只设置了客户端作为启动项目 - 当我将 Host 和 Client 打开为两个单独的项目并运行它们时,它按预期工作。在书中,它说编译解决方案并首先运行 Host 项目,然后是 Client 项目。如何在解决方案中实现这一点? - Nicholas Murray
你可以将多个项目标记为启动项目,我认为这是在解决方案属性中完成的。 - Shiraz Bhaiji

2
在解决方案资源管理器中,右键单击解决方案并选择“属性”。 在左侧,“常规属性”下,选择“启动项目”。 在右侧,选择“多个启动项目”-将“主机”移到顶部并更改操作为“开始”-在“主机”下方移动“客户端”并更改操作为“开始”。 调试时,单击F5,Visual Studio将首先在控制台应用程序中启动主机项目,然后在单独的控制台应用程序中启动客户端项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接