通过Web浏览器从LAN与c#服务进行通信

时间:2015-05-07 19:24:07

标签: c# browser service lan

我创建了一个C#项目,它包含在LocalSystem帐户下运行的后端服务和在当前登录用户帐户下运行的GUI。

这两部分通过命名管道进行通信,实现为:

SERVICE:

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服务器来完成,以避免创建移动设备应用程序并只使用其浏览器吗? (我真的很喜欢!)

我很困惑,所以我会非常感谢你的一些指导......

1 个答案:

答案 0 :(得分:0)

您要问的一个问题是您的NetNamedPipeBinding是否适用于此方案。它不会。当服务与与服务通信的进程在同一台机器上时,WCF使用NetNamedPipeBinding。在您描述的场景中情况并非如此。

你所询问的是一个相当大的主题,但是这里有一个指针:尝试切换到使用BasicHttpBindingWSHttpBinding,因为这些可以处理场景客户端与服务不在同一台机器上的位置。要熟悉这一点,您可以专注于让它们从首先联系您服务器的PC上的代码运行。请注意,对于您是否选择Basic vs WS绑定存在真正的安全隐患。您必须弄清楚您的安全需求是什么以及如何继续。如果这是一个内联网,你可能能够以相当简单的安全性逃脱,但你谈论移动设备的事实使得这听起来更复杂。

您的下一步将是弄清楚如何在移动设备上运行此功能。如果您的移动设备不是Windows设备,则WCF的一些易用性将会丢失。 (在Windows设备上可能仍然使用svcutil生成的客户端来调用您的服务)。在这里,我认为您可能需要考虑通过WCF使用RESTful Web服务。让你的Android应用与Restful服务交谈可能比通过wsdl与服务交谈更简单,但两者都可以。