2011-02-16 159 views
0

什么是创建WCF服务层的好方法,以便本机.Net客户端应用程序和其他客户端类型可以与服务交谈?与.Net和其他客户端的WCF?

我知道,未来我们的应用程序需要支持移动设备。

我们传递对象到我们的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; } 
} 

因此,有可能是这样的在我们servcie的方法:现在

public bool Save(User item){ 
    ...do some work 
} 

public User GetUserByUsernameAndPassword(string username, string password){ 
    ...do some work 
}  

,在.net中我可以使用与我的服务相同的对象库,但与其他客户端无法使用。所以,如果我不想为每种类型的客户端写一堆不同的方法,那么处理这个问题的最好方法是什么?

回答

1

我觉得与其他客户端的互操作性更依赖于实际合同的约束力。如果您将支持的其他客户端和客户端语言可以执行SOAP,那么坚持使用BasicHttpBinding可以提供最好的支持。例如,使用.NET 2的客户端仍然可以与.NET 3.5 WCF服务器进行交互。还有一些面向Java和其他语言的SOAP库。

服务器可以发布WSDL,然后客户端可以使用WSDL的任何语言自动生成所有合约接口和类型。这将处理数据合同类型的“重用”。

如果你想创业,从SOAP了,有办法做REST或纯老XML或JSON与WCF,但它得到了很多从服务器端更复杂......

1

你现在拥有的东西应该适用于其他任何客户端。什么使你相信可能有问题?

+0

嗯,我还没有玩过很多其他客户类型,并想获得意见。我猜数据对象的表示是我关心的。比方说,我有一个客户端使用XMLHTTPRequest,另一个客户端使用.Net。我并不想传递一个SOAP信封,但知道JSON对于HTTP请求会很好,并且同时希望.Net应用程序传递这个actaul对象。我可以用ys服务中的一种方法做所有这些吗? XMLHTTPRequest需要什么样的绑定? – DDiVita 2011-02-16 20:05:49

+0

@DDiVita:你不明白。 SOAP是标准的。它将“只是工作”。即使您的.NET客户端也使用标准协议来访问数据。 – 2011-02-16 20:06:57

+0

你说得对。我想我可能会在想这个。我一直在阅读关于请求类型属性的许多信息,这些属性可以放在一个操作上,这可能会让我失望。谢谢! – DDiVita 2011-02-16 20:36:21

1

这取决于您选择支持哪种绑定。某些绑定仅适用于.NET。

  • BasicHttpBinding:SOAP over HTTP。任何SOAP客户端都可以连接

  • WsHttpBinding: - 它与 BasicHttpBinding相同。简而言之,它使用 SOAP over HTTP。但是它也支持可靠的消息传输, 安全和交易。 WS-Reliable WS-Security的消息传递,安全性, 以及与WS-Atomic的交易 事务支持可靠的 消息。

  • NetTcpBinding的: - 本 结合发送二进制编码SOAP, 包括用于可靠 消息传送,安全性,和 交易,直接在TCP支持。 NetTcpBinding 最大的缺点是服务器和客户端应该也使用.NET语言制作 。

  • NetNamedPipesBinding:-Ths binding 在指定的 管道上发送二进制编码的SOAP。在同一台基于Windows的 计算机上,此绑定仅可用于 之间的WCF到WCF通信之间的 进程。