WCF与.Net和其他客户?

时间:2011-02-16 18:53:00

标签: wcf .net-4.0

创建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中,我可以使用与我的服务相同的对象库,但是对于其他客户端,我将无法使用。那么,如果我不想为每种类型的客户端编写一堆不同的方法,那么处理这个问题的最佳方法是什么?

3 个答案:

答案 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,但是从服务器端来看它会变得更复杂......