2015-05-07 100 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

相关问题