我注意到使用SoapUI我的OperationContract的DataContract(request)参数被认为是"可选"。 (我也测试了它,实际上我可以避免在我的wcf方法中传递请求,或者将其传递为null)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:con="..." xmlns:data="...">
<soapenv:Header/>
<soapenv:Body>
<con:MyMethod>
<!--Optional:-->
<con:request>
<data:Id>?</data:Id>
</con:request>
</con:MyMethod>
</soapenv:Body>
</soapenv:Envelope>
在DataMember上,与示例中的Id一样,我可以放置属性
[DataMember(IsRequired = true, EmitDefaultValue = false)]
public string Id {get; set;}
在这种情况下,如果我没有放入所有xml Id部分,或者我把它置为null我得到序列化异常作为响应,我的OperatationContract方法永远不会被调用,因此我可以肯定Id的实现我的方法!= null。
我不知道如何使用请求本身执行此操作。 如果请求为空,那么简单的解决方案是检入每个Operation方法,并且在这种情况下返回错误消息。我希望有一个更通用的解决方案