我有一个WCF服务;此服务具有接收类型为Request
的参数的操作。这只是基本类型,并且在调用操作时,我们实际发送类型为Request_V1
的值(来自Request
的inherts),它具有我想要发送的请求的完整实现。
当尝试使用soapUI测试服务时,我能够创建类型Request_V1
的复杂类型(添加适当的命名空间)但由于某种原因,服务正在接收值,就像它是Request
类型。
阅读ServiceKnowType
,我发现here我需要在客户端显式指定这种继承关系,但是我没有找到任何有关如何在soapUI上执行此操作的信息
有没有人经历过并解决了同样的问题?
由于
答案 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。