使用WCF发现时出现TCP / IP异常

时间:2012-06-29 19:59:48

标签: c# .net wcf tcp discovery

我们有以下代码......

DiscoveryService.cs

[ServiceContract]
public interface IDiscoveryService
{
    [OperationContract]
    void PrintHello();
}

public class DiscoveryService : IDiscoveryService
{
    public void PrintHello()
    {
        MessageBox.Show("Hello");
    }
}

Server.cs

    private void InitializeDiscovery()
    {
        Uri baseAddress = DiscoveryHelper.AvailableTcpBaseAddress;
        ServiceHost host = new ServiceHost(typeof (DiscoveryService), baseAddress);
        host.EnableDiscovery();
        host.Open();
    }

Client.cs

    private void DiscoverAddressClick(object sender, EventArgs e)
    {
        EndpointAddress address =  DiscoveryHelper.DiscoverAddress<IDiscoveryService>();
        Binding binding = new NetTcpBinding();

        IDiscoveryService proxy = ChannelFactory<IDiscoveryService>.CreateChannel(binding, address);
        proxy.PrintHello();

        (proxy as ICommunicationObject).Close();
    }

现在,这段代码似乎可以解决,直到我们修改与服务合同有关的任何内容,此时我们得到TCP异常,错误代码10061(连接被动拒绝)。但是,我们无法弄清楚谁拒绝,或为什么。如果我们试图将我们的代码恢复到以前的状态,当它工作时,我们不能,它只是拒绝工作(似乎)我们在项目中添加/删除东西。

每次我建造我先清洁。我们也关注instructions posted here

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我将首先说明我并不熟悉WCF Discovery ......尽管我可以在新的服务器堆栈中实现它。但是我在这里没有看到的一件事是你在这里展示的代理服务器的存在。

据我所知,我在MSDN上读到的内容,您的WCF服务基本上会将其存在于网络上运行的代理服务器上。然后,您的客户将通过DiscoveryProxy服务器“发现”您的服务服务器。这可能是你失踪的管道。

答案 1 :(得分:0)

当InitializeDiscovery方法完成后,您当前的服务器实现将关闭服务器,因为您的主机只有函数作用域,并且垃圾收集器将清除它,除非您在其他地方保留引用。