私は、サードパーティのwsdl
の年次変更を受け入れるようにアプリケーションコードを準備しようとしています。私は作ることができず、このwsdl
のデザインを支配することはできません。このwsdl
のオブジェクトは、変更されたり、アイテムが追加されたり、削除されたりすることがあります。しかし、私はまだwsdl
の以前のバージョンを保持する必要があります。複数の名前空間を実装するメソッドをリファクタリングする
wsdl
と同じように、サービスリファレンスとして現在のwsdl
を追加する予定です。
現時点では、以下のような複数の方法があります(下記を含む)。
TaxYear
プロパティを使用して、実際に参照するものを「:Service2015」または「Service2016」と決定します。私はwsdl
のオブジェクトを表す汎用オブジェクトを渡しており、親メソッドで使用するオブジェクトに対してはref
というパラメータを渡しています。
このようなレパコットリングは、膨らみがたくさんあります。私がやろうとしていることをやり遂げるには、より良い方法が必要だと思っています。
C#を使用してこれを行うより良い方法がありますか、これは私が達成するために必要なことを実行するための最良で最も不便な方法です。
private static void RetrieveRequestObject(ref object objRequest, object objBusinessHeader, object objSecurityHeader, object objManifestHeader, object objFormData)
{
if (TaxYear.Equals(2015))
{
objRequest = new Service2015.BulkRequestTransmitterRequest()
{
ACABusinessHeader = (Service2015.ACABulkBusinessHeaderRequestType)objBusinessHeader,
Security = (Service2015.SecurityHeaderType)objSecurityHeader,
ACATransmitterManifestReqDtl = (Service2015.ACATrnsmtManifestReqDtlType)objManifestHeader,
ACABulkRequestTransmitter = (Service2015.ACABulkRequestTransmitterType)objFormData
};
}
else if (TaxYear.Equals(2016))
{
objRequest = new Service2016.BulkRequestTransmitterRequest()
{
ACABusinessHeader = (Service2016.ACABulkBusinessHeaderRequestType)objBusinessHeader,
Security = (Service2016.SecurityHeaderType)objSecurityHeader,
ACATransmitterManifestReqDtl = (Service2016.ACATrnsmtManifestReqDtlType)objManifestHeader,
ACABulkRequestTransmitter = (Service2016.ACABulkRequestTransmitterType)objFormData
};
}
}
私はあなたがBulkRequestTransmitterRequestの2016バージョンを使用する必要があると賢明なサービス要求だと思います。 2015年の提出の場合でも年ごとの差別化は、添付ファイルで送信される「ペイロード」xml(1094 \ 1095の組み合わせ)にのみ適用する必要があります。 – fatherOfWine
あなたは正しいです。 Webサービス所有者とのいくつかの対応は、送信のエンドポイントが変更されないことを示しました。したがって、FormDataのXMLを変更するだけで済みます。これに対する私の解決策は、毎年必要なFormData用の「テンプレート」XML文書を作成することでした。 Webサービスの所有者は、チェックする必要があるスキーマを判断するためにマニフェストのTaxYearを調べます。私はこれを投稿したことを忘れて、答えを追加してこの投稿を更新します。 – Russ
私はxsdsからクラスを作成してしまったので、それらのクラスを作成してxmlにシリアライズします。 – fatherOfWine