【问题标题】:Can params keyword be expressed via WSDL definition可以通过 WSDL 定义来表达 params 关键字吗
【发布时间】:2011-05-22 10:02:41
【问题描述】:

我正在开发的应用程序正在为实现以下服务合同的 WCF 服务公开服务元数据:

[ServiceContract]
public interface IService
{
    [OperationContract]
    object Execute( string action, params object[] args );
}

添加服务引用后,我注意到服务合同中没有params关键字,并且在生成的Reference.cs文件中实现。

WSDL 定义中是否有 params 对应项?

或者params 是特定于 C# 的东西,不能通过 WSDL 定义来表达,所以服务客户端生成器不知道应该在生成期间添加 params

【问题讨论】:

    标签: c# wcf wsdl params


    【解决方案1】:

    params 只是语法糖,它允许您在不传递准备好的数组的情况下调用期望对象数组的方法。 WCF 对此一无所知 - 它应该只期望对象数组。顺便提一句。将object 的数组传递给服务操作可能会导致多个问题,因为如果您将自定义对象作为参数传递,WCF 可能不知道如何序列化该对象。

    【讨论】:

    • 谢谢,我只需要确认。我非常清楚这些问题。我不知道该服务可能期望哪些类型。因此,该服务配置了一个自定义端点行为,该行为允许通过配置添加服务已知类型。嗯,我不太确定在传递对象的序列化过程中是否会出现问题(它是客户端,对吧?)。我认为它只会在反序列化期间发生,因为该服务不知道接收到的 SOAP 消息部分的类型(使用 SOAP 时)。如果我错了,请纠正我。
    • 如果你使用已知类型并且类型在 WSDL 中描述你应该没问题。
    • 我想知道是否有一种方法可以在 WSDL 定义中包含自定义数据,自定义服务引用生成器工具可以使用该方法来包含 params 关键字。您是否碰巧知道 WSDL 是否有可以包含任意 XML 的元素?
    • 是的,它有 - WSDL 提供了可扩展点,但它需要您编写自定义的 svcutil 类工具,以便在生成客户端代码时能够使用此类自定义扩展。
    猜你喜欢
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2015-05-16
    • 2015-04-05
    • 2012-06-28
    相关资源
    最近更新 更多