为什么在调用WCF服务时必须反转参数?

时间:2016-10-06 13:18:14

标签: vb.net wcf

我有一个WCF服务,其方法有3个参数:1个输入和2个输出。例如。

Foo(input, out1, out2)

我在客户端代码中添加了服务引用,但是,当我去调用该服务时,visual studio无法正确识别参数。我必须将服务称为

Foo(out1, out2, input)

这是为什么?我可以看到服务引用的参考文件中的顺序是相反的,但是如果我更改了顺序,那么visual studio会给出错误,说明它们的顺序不正确。这是正常的行为吗?我只需要使用反向参数调用服务吗?

1 个答案:

答案 0 :(得分:2)

  

...当我去打电话给服务时,视觉工作室并没有认识到这一点   参数正确

您遇到的问题是设计问题。

当服务将WSDL元数据公开给使用者时,服务定义中没有任何地方以其原始形式维护服务操作签名。

相反,输入和输出参数在单独的集合中声明。

现在,添加服务引用工具的工作是尝试从元数据重建消费者的原始操作签名,但在这种情况下它不能。此时原始操作签名已丢失。所以它只是重新构造首先处理输出参数集合的操作,然后是输入参数,从而重建你观察到的行为。

实现这一目标的唯一方法是:

  1. 不在服务操作定义中使用输出参数。无论如何,建议使用output parameters are a code quality flag,如果可能,应该避免使用,或
  2. 不公开服务中的元数据。消费者可以使用WCF channel而不是使用服务引用来使用实际服务定义类型直接调用服务。这通常被认为是在WCF中调用服务的一种更好的方法。
  3. 或者你可以什么都不做。消费者仍能正确调用服务操作吗?