如何确保可以从任何其他语言(Java,PHP,iOS使用等)访问我的WCF服务?
我已将所有内容保留为httpbinding,并且未使用任何针对客户端的.net角色/成员身份验证。但有一些我不确定的事情。比如,我可以返回那些其他语言可读的通用列表吗?
答案 0 :(得分:1)
如果您无法控制用于使用服务的客户端技术,则无法100%确定。但是,如果您的Web服务(WSDL)符合WS-I basic profile v1.1,您就会非常有信心。该标准得到了广泛的支持和成熟。您可以使用优秀的SoapUI测试工具来测试WSDL的一致性。
答案 1 :(得分:1)
任何不以net
(netTcp,netMsmq等)开头的WCF绑定应该没问题 - 它们的设计是可互操作的。
最基本的一个是basicHttpBinding
,它几乎是普通的HTTP - 没有什么可以添加到它。您应该可以从任何脚本语言(PHP等)调用它。
更高级的绑定是wsHttpBinding
,它实现了许多WS- *标准,并且可以从其他语言中调用,其中网络堆栈可以处理WS- *等Java等东西。
然后是webHttpBinding
,它不是通过SOAP公开您的服务,而是通过REST端点公开您的服务。这应该可以从任何语言,任何设备,任何地方调用。
当然,如果您从服务中公开多个端点,那么您可以获得最佳覆盖率,为任何试图给您打电话的人提供各种选择。所有这些只需在配置中完成 - 无需更改代码即可支持多个端点,多个绑定等。
至于列表和内容:WCF交换序列化消息 - 基本上是XML - 由XML模式管理。 WSDL和XSD的组合完全可以互操作,并且可以被各种其他语言理解。
.NET中的List<T>
将在XML结构中变成一个数组,并且完全可以互操作 - 不用担心。客户端可能只是返回一个数组而不是列表 - 但这不是问题。
唯一的问题是您无法真正建模通用列表,因为XML架构不支持泛型 - 您需要明确说明您要发回的内容。 List<T>
无法使用List<Customer>
(如果您的Customer
对象属于您的数据合同并标记为此类)