Публикация службы Wcf с использованием BasicHttpBinding для удаленных клиентов - PullRequest
2 голосов
/ 25 февраля 2011

Я создал 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 в своем браузере, и связь работает должным образом (запустите сервер, запустите клиент, см. «Вы ввели: 42» в WcfClientConsole). Теперь я хочу сделать это удаленно. Я изменяю baseAddress на "http://0.0.0.0:9000/WcfTest/" и запускаю сервер на другом компьютере (192.168.150.140). На этой машине в браузере я могу открыть http://localhost:9000/WcfTest/Service1 и http://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 Ответ

1 голос
/ 25 февраля 2011

Проверьте ваш брандмауэр. Обычно это основная причина такого рода проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...