我正在构建一个解决方案,该解决方案将使用WCF定期使组织中的所有计算机“回家”。让我们假设为了讨论,组织中的每台计算机都连接了一台天气传感器。此应用程序的目的是每台计算机应联系中央服务器以报告其位置的天气情况。要传输的数据被编码为字符串。
为了讨论起见,假设我有一个Windows服务,它每天调用一次方法SendWeatherReport
。该功能的签名是:
void SendWeatherReport(string report);
假设我已使用以下界面设置了WCF方法:
[ServiceContract]
public interface IWeatherReportReceiver
{
[OperationContract]
void GetReport(string report);
}
我有以下要求:
1)我的天气报告信息是专有和保密的;为安全起见,必须对其进行加密。
2)天气报告信息将通过互联网传输。运行WCF服务以接收报告的计算机将位于example.com
。
3)天气预报必须通过一些过热的防火墙才能通往服务器。
现在我已经解释了我的要求,请向我解释如何设置我的端点配置以满足这些要求。
为了满足(1),我相信我需要使用net tcp绑定。对于(3),也许我可以将此绑定配置为在端口80,443或其他一些常用端口上工作。我主要担心的是我不知道如何配置软件以向WCF服务器标识自己......
答案 0 :(得分:3)
即使没有https,WsHttpBinding也可以加密消息。
如果要使用SOAP加密,则必须使用SecurityMode="Message"创建绑定;如果需要(并且可以)使用https,则必须创建SecurityMode="Transport" 看看How to: Set the Security Mode
我的感觉是使用HTTP协议将部署二进制TCP要简单得多,因为代理通常只允许http流量。
关于身份验证,它取决于:)最安全的机制是使用客户端证书,但是你需要它而不是标准的用户/密码身份验证吗? (以及所有必要的基础设施)
答案 1 :(得分:2)
听起来像是Microsoft's Service Bus的完美应用。