3


1

プロキシなしでWebサービスを呼び出す

C#プログラムを使用せずにWebサービスを呼び出す必要があります。 ほとんどの場合、Webサービスは標準形式ではありません。 インターフェイスの説明(wsdlおよびxsd)は非常に複雑であり、メカニズムを生成するプロキシを使用すると、数百のクラスになります。 生成されたクラスは非常に汎用的で、ほとんどが単純なオブジェクト型をメンバーとして持つため、ほとんど役に立ちません。最良のオプションは、SOAPメッセージを手動で作成することです。 これは、Webサービスプロバイダーが選択することを提案した方法でもあります。送信する必要のあるsoap / xmlメッセージを取得し、テンプレートに従ってメッセージを作成します。 問題は、メッセージを最も効率的に作成する方法です。 もちろん、メッセージ文字列のハードコーディングはオプションですが、より良いオプションが存在するのではないかと思います。 文字列に完全なメッセージがある場合、どのようにメッセージを送信するのが最善ですか。 単純なHttpRequestを使用する必要がありますか、それともwcfスタックのメカニズムを使用できますか? メッセージを作成する現在のアプローチは次のようになります。

string msg = envelopeBegin;
RouteType rootType = new RouteType();
XmlSerializer serializer = new XmlSerializer(typeof(RouteType));
StringWriter stringWriter = new StringWriter();
serializer.Serialize(stringWriter, rootType , customNamespace);
msg += stringWriter.ToString();
msg += envelopeEnd;

生成する必要があるSoap / xmlメッセージは次のようになります

xmlns:env=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0="http://www.skanska.se/oagis/9/ws/faults">






OEBS_SE
SKAIS017I
SEBA_RAPPE
XXOM_INTEGRATION_SVT

2010-02-26T15:03:27+01:00
xxxxxxxxxxxxxxxxx




*





141779

2009-11-04T07:00:54+01:00

2 Answer


2


さまざまなメッセージのすべてに型定義を必要とせずに、WCFインフラストラクチャを確実に使用できます。 WCFは、http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.message.aspx [Message]クラスを通じてこれを特にサポートしています。 それを使用することはそれほど難しくありません。 それらについての詳細はこちらにありますが、基本的にはXMLリーダーとライターを使用してメッセージを読み書きするという考え方です。

http://msdn.microsoft.com/en-us/library/ms734675.aspx [メッセージクラスの使用]


0


そのための1つの方法は、値のプレースホルダーを含むXMLスケルトンテンプレートを作成することです。 XMLを読み取り、値をオブジェクトの値で置き換えます。 HttpWebRequestを使用して、結果のXMLをWebサービスに投稿します。

このアプローチが機能する場合でも、Webサービスに使用されていないメソッドとオブジェクトが何百も含まれている場合でも、WCFプロキシクラスを作成し、代わりにこれを使用することを強くお勧めします。 有効なWSDLである限り、WCFはそれを処理します。 また、Webサービスに変更がある場合は、プロキシを再生成するだけです。 このWebサービスのさを避けるために、便利なメソッドとクラスのみを公開し、実際の呼び出しを隠す独自のインフラストラクチャを作成します。