使用 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>

我做错了什么?是代码问题还是我应该开始在其他地方寻找问题?

使用 WCF 服务获取连接被拒绝

只是一种预感,但我怀疑没有任何监听,因为即使托管服务的应用程序可能仍在运行,服务主机也没有。 在构造函数中:

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 块中,以防万一尝试打开它时出错。