当使用代理类调用Soap WebService而非使用SoapExtensions时,有没有人知道在.Net中访问原始Soap响应的另一种方法? SoapExtensions对我不好,因为我只能在方法属性构造函数中将常量数据传递给它。
答案 0 :(得分:0)
方法A - 假SoapHeader (1)构造一个从SoapHeader派生的抽象类。 (2)允许客户从(1)派生一个类。 (3)在[client |中]将抽象类作为SoapHeader应用服务] (4)SoapExtension以下列方式读取Soap消息。 a)当消息是[SoapClientMessage | SoapServerMessage]和BeforeSerialize i)阅读message.Headers并在SoapHeaderCollection中找到抽象类型。 ii)在SoapExtension中设置一个私有成员变量作为'this'头的实例。 iii)从SoapHeaderCollection中删除标题以防止序列化。
方法B - 改变方法签名 (1)改变WebMethod的方法签名,以包括用[XmlIgnore]编码的一个或多个参数 a)如果方法在客户端上,则[XmlIgnore]参数为'IN'参数。 b)如果方法在服务器上,则[XmlIgnore]参数为'OUT'参数。 (2)改变方法。在方法的实现代码中调用,在客户端上包含这个新添加的参数。 (3)SoapExtension以下列方式读取Soap消息。 a)当消息是SoapClientMessage和BeforeSerialize时 i)从与[XmlIgnore]相关联的消息中检索InParameterValues,并在SoapExtension中为每个[XmlIgnore]参数设置私有成员变量。 b)当消息是SoapServerMessage和BeforeSerialize时 i)从与[XmlIgnore]相关联的消息中检索OutParameterValues,并为每个[XmlIgnore]参数设置SoapExtension中的私有成员变量。