创建WCF服务层的好方法是什么,以便本机.Net客户端应用程序和其他客户端类型可以与服务进行通信?
我知道,将来我们的应用程序需要支持移动设备。
我们将对象传递给我们的WCF方法,类似于:
[DataContract]
public class User: DomainBase
{
[DataMember]
public string Username { get; set; }
[DataMember]
public string Password { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}
所以我们的服务可能有这样的方法:
public bool Save(User item){
...do some work
}
public User GetUserByUsernameAndPassword(string username, string password){
...do some work
}
现在,在.Net中,我可以使用与我的服务相同的对象库,但是对于其他客户端,我将无法使用。那么,如果我不想为每种类型的客户端编写一堆不同的方法,那么处理这个问题的最佳方法是什么?
答案 0 :(得分:1)
你现在拥有的东西应该适合任何其他客户。是什么让你相信可能存在问题?
答案 1 :(得分:1)
这取决于您选择支持哪种绑定。某些绑定仅适用于.NET。
BasicHttpBinding:SOAP over HTTP。任何SOAP客户端都可以连接
WsHttpBinding: - 就像是一样 basicHttpBinding的。简而言之,它使用 SOAP over HTTP。但也有它 支持可靠的消息传输, 安全和交易。 WS-可靠 使用WS-Security进行消息传递,安全性, 和WS-Atomic的交易 交易支持可靠 信息。
NetTcpBinding: - 这个 绑定发送二进制编码的SOAP, 包括对可靠性的支持 邮件传输,安全性和 事务,直接通过TCP。该 NetTcpBinding的最大缺点 是服务器和客户端都应该 也可以用.NET语言编写。
NetNamedPipesBinding:-Ths绑定 通过命名发送二进制编码的SOAP 管道。此绑定仅可用 用于WCF到WCF之间的通信 同一个基于Windows的进程 机。
答案 2 :(得分:1)
我认为与其他客户端的互操作性更依赖于实际合同的绑定。如果您支持的其他客户端和客户端语言可以执行SOAP,那么坚持使用BasicHttpBinding
可以提供最佳支持。例如,使用.NET 2的客户端仍然可以与.NET 3.5 WCF服务器进行交互。该区域还有用于Java和其他语言的SOAP库。
服务器可以只发布WSDL,然后客户端可以使用WSDL中的任何语言自动生成所有的契约接口和类型。它处理数据协定类型的“重用”。
如果你想远离SOAP,有办法用WCF做REST或Plain-old-XML或JSON,但是从服务器端来看它会变得更复杂......