WCF服务到多个端点

时间:2010-12-05 08:44:26

标签: wcf .net-4.0

如何确保可以从任何其他语言(Java,PHP,iOS使用等)访问我的WCF服务?

我已将所有内容保留为httpbinding,并且未使用任何针对客户端的.net角色/成员身份验证。但有一些我不确定的事情。比如,我可以返回那些其他语言可读的通用列表吗?

2 个答案:

答案 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对象属于您的数据合同并标记为此类)