我在调用我的合作伙伴的Soap网络服务时遇到问题。 我必须用C#编写一个客户端来与这项服务合作。 我对网络服务比较陌生,对不起,如果我的问题很简单,但在google上苦苦挣扎之后我找不到答案。
因此,服务(用php编写)接受键值对的参数。 此结构(字段名称,类型)记录在手册中,但未出现在wsdl中(wsdl中没有类型定义)
WSDL的一部分:
<message name="Authenticate">
<part name="auth" type="xsd:anyType"/>
</message>
(例如,“auth”是上面提到的数组类型,这是一个输入参数)
因此这些参数在wsdl中显示为“anyType”。 当我生成代理类(使用添加Web引用选项)时,我注意到这些参数在自动生成的类中显示为“对象”。
我试图传递
我的自定义类是:
[Serializable]
public class AuthClass
{
public string Username { get; set; }
public string AuthCode { get; set; }
}
所以我创建了一个“Authclass”实例,填充itt,并尝试传递给该服务。
Authclass a = new AuthClass();
(...fill....)
MyService s = new MyService(); //auto-generated proxy class
s.Authenticate(a); //auto-generated method
在运行时,我收到了序列化错误消息:不期望类型为HelloWsdl.AuthClass。使用XmlInclude或SoapInclude属性指定静态未知的类型。
我为AuthClass,SoapInclude,XMLInclude,XmlRoot等尝试了很多序列化属性,我也尝试使用对象数组,List等进行“对象”,但这些都没有解决问题。
所以我的问题是
不幸的是我无法更改wsdl。