2011-02-24 17 views
2

我創建了3個項目的WCF服務:發佈使用basicHttpBinding的遠程客戶端

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/Service1http://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處收聽的端點可以接受該消息。」)。

我該怎麼做呢?

+2

如果您無法使用Web瀏覽器連接到該路徑,我會懷疑存在防火牆問題。 – 2011-02-24 22:38:05

+0

+1可以telnet到端口9000 – 2011-02-25 01:05:16

+0

@John Bingo,防火牆問題。對於其他幾個項目,當程序/服務需要時,Windows會提示我添加規則。顯然,如果項目是基於WCF的,則情況並非如此。 TCPView(http://technet.microsoft.com/en-us/sysinternals/bb897437)告訴我在端口9000上偵聽的進程的名稱實際上是「系統」,這可能與它有關。非常感謝! – epalm 2011-02-25 15:23:49

回答

1

檢查您的防火牆。這通常是這類問題的主要原因。

+0

添加了一個答案,以便您可以標記爲接受:) – 2011-02-25 15:30:52

+0

當然。再次感謝。 :) – epalm 2011-02-25 17:14:01

+0

@epalm你找到解決方案嗎? – user781700 2014-05-19 19:34:24