Я создал 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, которая могла бы принять сообщение. ").
Я поступаю неправильно?