我创建了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/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处没有可以接受的端点侦听消息。“)。
我是以错误的方式解决这个问题吗?
答案 0 :(得分:1)
检查防火墙。这通常是造成这类问题的首要原因。