【发布时间】:2012-08-12 09:01:17
【问题描述】:
我有几个关于 WCF 的问题: - 一个程序可以同时充当客户端和服务器吗? - 我的代码有什么问题:
服务:
[ServiceContract]
public interface IShout
{
[OperationContract]
String Broadcast(String message);
}
实现:
public class eveShout : IShout
{
public String Broadcast(String message)
{
return message + " reply";
}
}
我以构造函数的形式启动服务:
ServiceHost s = new ServiceHost(typeof(IShout));
s.AddServiceEndpoint(typeof(IShout), new BasicHttpBinding(), "http://localhost:9189");
s.Open();
当我点击另一个表单上的按钮时,我想发送一条消息并得到回复。 我使用以下代码:
ChannelFactory<IShout> channel = new ChannelFactory<IShout>(new BasicHttpBinding(), "http://localhost:9189");
IShout shout = channel.CreateChannel();
String reply = shout.Broadcast("Test");
注意:所有代码都在同一个命名空间中。 注意:我首先启动“服务器”(打开)然后应用程序继续。
当我运行代码时,服务器就创建好了。我使用 netstat -a 查看端口是否打开。当我运行命令时,我得到 9189 处于监听状态。但代码在命令回复 = 喊(“测试”)处停止。我得到一个例外,上面写着
00:00:59 后等待回复的请求通道超时...
【问题讨论】:
-
你是通过 svcutil 创建代理类吗?
-
这段代码:1) 不会编译(
eveShout.Broadcast不是公开的显式实现); 2)如果你修复1,它会陷入运行时错误(Broadcast方法未标记为OperationContract);所以,请提供我们真正运行的代码示例。 -
burning_LEGION - 我不使用 svcutil。这是必须的吗?丹尼斯:我修复了代码,你现在可以检查一下吗?
-
你错了如果你在客户端使用服务器接口,你必须使用代理类
-
@burning_LEGION 您不需要使用代理。这种情况下使用代理就特别没用了。
标签: c# .net wcf exception-handling