我創建了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/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處收聽的端點可以接受該消息。」)。
我該怎麼做呢?
如果您無法使用Web瀏覽器連接到該路徑,我會懷疑存在防火牆問題。 – 2011-02-24 22:38:05
+1可以telnet到端口9000 – 2011-02-25 01:05:16
@John Bingo,防火牆問題。對於其他幾個項目,當程序/服務需要時,Windows會提示我添加規則。顯然,如果項目是基於WCF的,則情況並非如此。 TCPView(http://technet.microsoft.com/en-us/sysinternals/bb897437)告訴我在端口9000上偵聽的進程的名稱實際上是「系統」,這可能與它有關。非常感謝! – epalm 2011-02-25 15:23:49