将PHP样式的数组参数从C#传递到Web服务

时间:2013-02-10 19:17:03

标签: c# soap

我在调用我的合作伙伴的Soap网络服务时遇到问题。 我必须用C#编写一个客户端来与这项服务合作。 我对网络服务比较陌生,对不起,如果我的问题很简单,但在google上苦苦挣扎之后我找不到答案。

因此,服务(用php编写)接受键值对的参数。 此结构(字段名称,类型)记录在手册中,但未出现在wsdl中(wsdl中没有类型定义)

WSDL的一部分:

    <message name="Authenticate">
    <part name="auth" type="xsd:anyType"/>  
    </message>

(例如,“auth”是上面提到的数组类型,这是一个输入参数)

因此这些参数在wsdl中显示为“anyType”。 当我生成代理类(使用添加Web引用选项)时,我注意到这些参数在自动生成的类中显示为“对象”。

我试图传递

  • HashTable,Dictionary:这些不可序列化。
  • 数组:不是键值对,不接受二维数组,一维不够(反正不行)。
  • 自定义类:我认为这将是答案,但我有 序列化问题。

我的自定义类是:

    [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等进行“对象”,但这些都没有解决问题。

所以我的问题是

  • 如何将“php-style”数组参数传递给此Web服务?哪一个 是正确的方法吗?
  • 是否可以在此使用生成的代理类 情况,或者我必须选择另一种技术?在这种情况下, 推荐哪种技术?

不幸的是我无法更改wsdl。

0 个答案:

没有答案