4

我有 WCF 服务;该服务有一个接收类型参数的操作Request。这只是基本类型,在调用操作时,我们实际上发送了一个类型的值Request_V1(它继承自Request),它具有我要发送的请求的完整实现。

尝试使用soapUI 测试服务时,我能够创建复杂类型的类型Request_V1(添加正确的命名空间),但由于某种原因,服务接收到的值就好像它是Request类型一样。

阅读关于ServiceKnowType,我发现在这里我需要在客户端以某种方式明确指定这种继承关系,但我还没有找到任何关于如何在soapUI上做到这一点的信息

有没有人经历过并解决过同样的问题?

谢谢

4

3 回答 3

2

您还必须在 SOAP 消息中指定类型。例如

<Request i:type="d:RequestV1">

...

其中 i 被定义为 XML-Instance 命名空间

于 2016-04-15T19:16:03.700 回答
1

在服务方面,您需要将类型转换为特定的派生类型。

operation (Request request){
    if(!(request is Request_V1)){
        throw Excetion("Unknown type!");
    }

    var request_v1 = Request as Request_V1;

    // use request_v1
}

在 SOAP UI 端,指定类型如下:

<soapenv:Body xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <ns1:OperationName>
     <ns1:request i:type="ns2:Request_V1">

在引用它们之前,请确保您已经定义了 ns1 和 ns2。

于 2014-09-30T15:54:36.977 回答
0

您没有在客户端中指定继承,而是在服务中指定。SOAPUI 应该没有问题。检查您的数据合同声明是否正确。这可能会有所帮助 -反序列化抽象类

于 2013-03-26T22:52:20.073 回答