我必须处理以下问题。我有一个 SOAP 服务器和一个 SOAP 客户端,它们都与 SAP 系统异步工作。我对所有填充了数据的类进行查询,然后我编辑我的客户以一次又一次地发送给他们(我正在寻找 SAP 向我发送可用数据,我们将对其进行处理,将其寄回)。问题是生成的代理类读取和重新读取数据略有不同。我正在寻找 2 天的方法来确定是!既然有非常敏感的数据,哪里真的丢不起。
下面是代理类的一个例子,服务器接收数据。
[GeneratedCode("svcutil", "3.0.4506.2152")]
[Serializable]
[DebuggerStepThrough]
[DesignerCategory("code")]
[XmlType(AnonymousType=true, Namespace="urn:sap-com:document:sap:soap:functions:mc-style")]
public partial class _wsv_cas01d0005p0000013303Response
{
private _wsv_cas01Rs0000012311S[] ec_20KiField;
private _wsv_cas01Rs0000012302S[] ec_21KiField;
private _wsv_cas01Rs0000012303S[] ec_23KiField;
private _wsv_caSafMsgExternalS[] etMessagesField;
private string evCeeRequestIdField;
private int evStatusCodeField;
[XmlArray(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
[XmlArrayItem("item", Form=XmlSchemaForm.Unqualified, IsNullable=false)]
public _wsv_cas01Rs0000012311S[] Ec_20Ki
{
get
{
return this.ec_20KiField;
}
set
{
this.ec_20KiField = value;
}
}
下面是另一个类的例子,代理要重新填充:
[GeneratedCode("svcutil", "3.0.4506.2152")]
[Serializable]
[DebuggerStepThrough]
[DesignerCategor("code")]
[XmlType(AnonymousType=true, Namespace="urn:sap-com:document:sap:soap:functions:mc-style")]
public partial class _wsv_cas01d0005p0000013203
{
private _wsv_cas01Rq0012210001S[] ic_20KiField;
private _wsv_cas01Rq0012210002S[] ic_21KiField;
private _wsv_cas01Rq0012210003S[] ic_23KiField;
private string ivBoIdField;
private string ivBoTypeCdField;
private string ivCbDestinationField;
[XmlArray(Form=XmlSchemaForm.Unqualified, Order=0)]
[XmlArrayItem("item", Form=XmlSchemaForm.Unqualified, IsNullable=false)]
public _wsv_cas01Rq0012210001S[] Ic_20Ki
{
get
{
return this.ic_20KiField;
}
set
{
this.ic_20KiField = value;
}
}
如您所见,标头已经为 SOAP 编写,因此我不能轻易更改其他客户端的名称。
使用这种方法,我一直在使用类的 XML 代码来记录 SOAP 消息。不幸的是,Naur 的名字都是错误的。
public static string ObjectToXml(object input)
{
string objectAsXmlString;
XmlSerializer xs = new XmlSerializer(input.GetType());
XmlSerializerNamespaces test = new XmlSerializerNamespaces();
using (StringWriter sw = new StringWriter())
{
try
{
xs.Serialize(sw, input);
objectAsXmlString = sw.ToString();
}
catch (Exception ex)
{
objectAsXmlString = ex.ToString();
}
}
return objectAsXmlString;
}
阅读发送回包的客户端的代码,我已经意识到了。使用修改后的 XML 代码就可以了!只要考虑到丰富的结果。
XmlSerializer serializer = new XmlSerializer(typeof(_wsv_cas01d0005p0000013203));
_wsv_cas01d0005p0000013203 Requestdaten = (_wsv_cas01d0005p0000013203)serializer.Deserialize(xmlDoc);
因此,现在我缺少一种转换 XML 的方法,并且存在的变量尚不清楚,因此我可以填写离开课程。我已经阅读了 XPATH 和 XSD,但我并不是我真正需要的。也许你们中的一些人曾经见过这样类似的案例,给我一个提示?
PS:我希望其中一个翻译的文本可以阅读。不幸的是,对于这种复杂的情况,我的英语实在是太复杂了。