使用 WCF 服务获取连接被拒绝
本文关键字:拒绝 连接 获取 WCF 服务 使用 | 更新日期: 2023-09-27 18:33:12
我使用 WCF 创建了一个服务,但无法连接到它,我不断收到以下错误:
无法连接到 net.tcp://localhost:5555/ControlChannel。这 连接尝试持续了 00:00:02.0139182 的时间跨度。技术合作计划(TCP 错误代码 10061:无法建立连接,因为目标 机器主动拒绝它 127.0.0.1:5555。
这是代码:
合同:
[ServiceContract(CallbackContract = typeof(IControlChannelCallback))]
public interface IControlChannel
{
[OperationContract]
void Join();
}
回拨合约:
public interface IControlChannelCallback
{
[OperationContract(IsOneWay = true)]
void ShowMessage(string message);
}
服务:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
public sealed class ControlChannel : IControlChannel
{
public static readonly IList<IControlChannelCallback> Callbacks = new List<IControlChannelCallback>();
public void Join()
{
var client = OperationContext.Current.GetCallbackChannel<IControlChannelCallback>();
if (!Callbacks.Contains(client))
Callbacks.Add(client);
client.ShowMessage("This message came from the server");
}
}
服务器:
public MainForm()
{
InitializeComponent();
using (var host = new ServiceHost(typeof(ControlChannel)))
{
host.Open();
}
}
客户:
public MainForm()
{
InitializeComponent();
var callback = new ControlChannelCallbackClient();
using (var factory = new DuplexChannelFactory<IControlChannel>(callback, "Client"))
{
var proxy = factory.CreateChannel();
proxy.Join();
}
}
应用.config 客户端:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<client>
<endpoint name="Client"
contract="Service.Contracts.Interfaces.IControlChannel"
binding="netTcpBinding"
address="net.tcp://localhost:5555/ControlChannel" />
</client>
</system.serviceModel>
</configuration>
应用配置服务器
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<services>
<service name="Service.Contracts.Objects.ControlChannel">
<endpoint contract="Service.Contracts.Interfaces.IControlChannel"
binding="netTcpBinding"
address="net.tcp://localhost:5555/ControlChannel" >
</endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
我做错了什么?是代码问题还是我应该开始在其他地方寻找问题?
只是一种预感,但我怀疑没有任何监听,因为即使托管服务的应用程序可能仍在运行,服务主机也没有。 在构造函数中:
public MainForm()
{
InitializeComponent();
using (var host = new ServiceHost(typeof(ControlChannel)))
{
host.Open();
}
}
您将ServiceHost
放在using
块中 - 一旦使用块退出(就在构造函数完成之前),ServiceHost
将被关闭并处置。
将您的代码更改为:
public MainForm()
{
InitializeComponent();
var host = new ServiceHost(typeof(ControlChannel))
host.Open();
}
您可以挂钩到应用程序关闭事件,以在程序运行结束时关闭ServiceHost
。
我还建议将host.Open()
包裹在 try-catch 块中,以防万一尝试打开它时出错。