次の問題に対処する必要があります。私は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 用に作成されているため、他のクライアントの名前を簡単に変更することはできません。
この方法では、SOAP メッセージをログに記録するために、利用可能なクラスの XML コードを費やしてきました。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: 翻訳されたテキストの 1 つが読めることを願っています。残念ながら、このような複雑なケースに対する私の英語は、単純に複雑すぎます。