使用BasicHttpBinding为远程客户端发布Wcf服务

时间:2011-02-24 22:29:17

标签: c# wcf

我创建了3个项目:

WcfServer - 默认的WCF服务库项目。

WcfServerConsole - 控制台应用程序:

static void Main(string[] args)
{
    try
    {
        var baseAddress = "http://localhost:9000/WcfTest/";

        Type contract = typeof(IService1);
        Type implementation = typeof(Service1);

        var address = baseAddress + implementation.Name;
        var binding = new BasicHttpBinding();
        var service = new ServiceHost(implementation, new Uri[] { new Uri(address) });

        service.AddServiceEndpoint(contract, binding, address);
        AddBehaviors(service);
        service.Open();

        Console.WriteLine("Server ready.  Press ENTER to terminate.");
        Console.ReadLine();

        service.Close();
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
    }
}

private static void AddBehaviors(ServiceHost service)
{
    var smb = service.Description.Behaviors.Find<ServiceMetadataBehavior>();
    if (smb == null)
    {
        smb = new ServiceMetadataBehavior();
        service.Description.Behaviors.Add(smb);
    }
    smb.HttpGetEnabled = true;

    var sdb = service.Description.Behaviors.Find<ServiceDebugBehavior>();
    if (sdb == null)
    {
        sdb = new ServiceDebugBehavior();
        service.Description.Behaviors.Add(sdb);
    }
    sdb.IncludeExceptionDetailInFaults = true;
}

WcfClientConsole - 控制台应用程序:

static void Main(string[] args)
{
    Thread.Sleep(1000);
    var proxy = new Service1Client();
    proxy.Open();
    var response = proxy.GetData(42);
    proxy.Close();
    Console.WriteLine(response);
    Console.ReadLine();
}

一切都在当地运作良好。当我运行服务器时,我可以在浏览器中看到http://localhost:9000/WcfTest/Service1,并且通信按预期工作(运行服务器,运行客户端,请参阅WcfClientConsole中的“您输入:42”)。现在我想远程执行此操作。我将baseAddress更改为"http://0.0.0.0:9000/WcfTest/"并在另一台计算机上运行服务器(192.168.150.140)。在该计算机上,我可以在浏览器中打开http://localhost:9000/WcfTest/Service1http://127.0.0.1:9000/WcfTest/Service1以及http://192.168.150.140:9000/WcfTest/Service1没有问题。在我的计算机上,我的浏览器无法连接到http://192.168.150.140:9000/WcfTest/Service1,也无法添加服务引用,并且将代理更改为new Service1Client("BasicHttpBinding_IService1", "http://192.168.150.140:9000/WcfTest/Service1");也会失败(“http://192.168.150.140:9000/WcfTest/Service1处没有可以接受的端点侦听消息。“)。

我是以错误的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

检查防火墙。这通常是造成这类问题的首要原因。