使用.NET SOAP服务并传递复杂类型参数时发生SOAP-ERROR

时间:2018-11-12 09:46:01

标签: c# php web-services soap

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>:这可以解决此特定问题,但这是解决这种情况的正确方法吗?

0 个答案:

没有答案