TL,DR:使用SOAP服务时,PHP似乎总是要求对象中包含所有值类型,但是.NET似乎没有,建议?
我有一个用.NET(.asmx
)编写的SOAP服务,该服务正在由第三方开发的PHP客户端使用。
我有一个[DataMember]
类型的Guid
,它对我没有任何影响,在我的“测试”控制台应用程序中初始化复杂参数对象时,可以忽略它,并且不会出现错误,这里是该代码和“测试”应用程序的精简版本:
[DataContract]
public class ComplexType
{
[DataMember] public Guid Id {get; set;}
[DataMember] public string Member1 {get; set;}
[DataMember] public string Member2 {get; set;}
}
// -------------------
// this is a console application
var client = new MyServiceRef.MyServiceClient();
var obj = new MyServiceRef.ComplexType
{
Member1 = "Data1",
Member2 = "Data2"
// I don't include here the 'Id' member of ComplexType
};
var ret = client.MyMethod(obj);
// Works with no errors
// Inspecting obj I see 'Id' is auto-initialized as Guid.Empty
// -------------------
我还在SOAPUI中测试了该服务,从有效负载中省略了该字段不会引起任何问题,并且一切正常。
另一方面,在PHP中使用服务时,会遇到此错误
SOAP-ERROR: Encoding: object has no 'Id' property
在这方面,PHP似乎更为严格,但是我对PHP的了解还不足以提供有意义的建议。
我可以想到的解决方法是制作所有Nullable<T>
:这可以解决此特定问题,但这是解决这种情况的正确方法吗?