在WCF服务中使用ServiceKnownType时,在SoapUI中将多态类型作为参数传递

时间:2013-03-26 18:12:59

标签: wcf soapui datacontract serviceknowntype

我有一个WCF服务;此服务具有接收类型为Request的参数的操作。这只是基本类型,并且在调用操作时,我们实际发送类型为Request_V1的值(来自Request的inherts),它具有我想要发送的请求的完整实现。

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

阅读ServiceKnowType,我发现here我需要在客户端显式指定这种继承关系,但是我没有找到任何有关如何在soapUI上执行此操作的信息

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

由于

3 个答案:

答案 0 :(得分:2)

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

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

...

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

答案 1 :(得分: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。

答案 2 :(得分:0)

您不在客户端中指定继承,而是在服务中指定继承。 SOAPUI应该没有问题。检查您的数据合同是否有正确的声明。这可能会有所帮助 - Deserialize Abstract Class