2015-05-07 102 views
0

我已經創建了一個C#項目,這個項目由一個在LocalSystem帳戶下運行的後端服務和一個在當前登錄用戶帳戶下運行的GUI組成。通過網絡瀏覽器與局域網中的c#服務進行通信

這兩部分通過命名管道溝通,爲實現:

服務:

PipeHost = new ServiceHost(this, new Uri[] { new Uri("net.pipe://localhost") }); 
PipeHost.AddServiceEndpoint(typeof(IPipeComm), new NetNamedPipeBinding(), "MyProgComm"); 
PipeHost.Open(); 

GUI:

ChannelFactory<IPipeComm> PipeFactory = new ChannelFactory<IPipeComm>(new NetNamedPipeBinding(), new EndpointAddress("net.pipe://localhost/MyProgComm")); 
IPipeComm PipeProxy = PipeFactory.CreateChannel(); 

所有工作甜的,但現在我停留在一個新的他們要求我添加功能。 我必須找到一種方式與移動設備上的服務進行通信(至少是單向服務),比如Android,連接到同一個局域網。

起初我想過構建一個簡單的Android本機應用程序,該應用程序將與添加服務的TCP服務器進行通信。

這需要我進行一些認真的研究,因爲我從來沒有做過這樣的事情。

所以,讓我問: 這是最簡單的方法來完成這個?

我可以利用現有的命名管道來達到此目的,從而節省時間和編碼嗎?

這可以通過添加一個最小的Web服務器來完成,以避免創建移動設備應用程序並使用其瀏覽器? (我真的preffer這一點!)

我很困惑,所以一對夫婦的指引將非常感激......

回答

0

一個你問的是你的NetNamedPipeBinding是否會在這種情況下的工作問題。它不會。 WCF使用NetNamedPipeBinding作爲與服務通信的進程在同一臺機器上。在你描述的情景中情況並非如此。

你在問什麼是一個相當大的話題,但這裏有一個指針開始於:嘗試切換到使用BasicHttpBindingWSHttpBinding來代替,因爲這些可以處理客戶端不在服務。爲了熟悉這一點,您可以專注於讓他們從PC上的代碼首先與您的服務器聯繫運行。請注意,您是否選擇基本vs WS綁定存在真正的安全隱患。您必須弄清楚您的安全需求以及如何繼續。如果這是一個內聯網,你可以用相當簡單的安全措施逃脫,但事實是你正在談論移動設備,這聽起來更加複雜。

下一步將弄清楚如何在移動設備上實現這一功能。如果您的移動設備不是Windows設備,WCF的一些易用性將會丟失。 (在Windows設備上可能仍然可以使用svcutil生成的客戶端來調用您的服務)。以下是我認爲您可能會考慮通過WCF使用RESTful Web服務的地方。讓您的Android應用程序與Restful服務對話可能比通過wsdl與服務對話更簡單,但兩者都可以工作。

+0

感謝您的澄清。我決定實施一個準系統HTTP服務器,並嘗試通過Web表單發送數據到服務。我不知道我是否會成功,但至少我不需要在移動端做任何編碼... – monica

相關問題