WCFを使用してTCP / IP経由で外部システムと通信することは可能ですか?

StackOverflow https://stackoverflow.com/questions/804460

質問

FIXプロトコルを使用して、TCP / IPを介して外部システムとやり取りするシステムを構築しています。 WCFを使用してクライアントからサーバーに通信しました。クライアントとサーバーの両方を制御できましたが、外部のTCP / IPベースのシステムとは通信しませんでした。これはWCFで可能ですか?もしそうなら、コミュニティは私が開始し、正しい方向に直面するためのリンクを提供できますか?

残念ながら、私たちはまだ初期の初期の計画段階にあるため、上記で提供されている情報よりも多くの情報はありません。私たちが知っているのは、システムがTCP / IPを介してシステムと通信する外部ベンダーがあることです。これを学習の機会として使用し、WCFを学習したいと思います。

役に立ちましたか?

解決

それが可能だとは思わない。少なくとも相手の通信プロトコルがわからないので、それをセットアップするのは簡単ではないだろう。

WCFアプリケーション内で、TCP接続をSOCKETで開かないのはなぜですか。これは、より簡単な方法でトリックを行う必要があります。

他のヒント

可能ですか?おそらくはい、しかし、それはいくつかの仕事を取るでしょう。

まず、TCP / IPベースのプロトコルの仕様を処理するカスタムWCFトランスポートチャネルを作成する必要があります(つまり、すべてのソケット処理コードを記述し、WCFチャネルモデルにフックする必要があります)。これは、WCFのTCPチャネルはこの種の作業用ではなく、比較的独自の文書化されていないワイヤプロトコルを使用しているためです。

FIXがどれほど複雑であるかを言うほどFIXに精通していませんが、WCFチャネルを作成する際にいくつかの落とし穴があり、その領域でのドキュメントは素晴らしいものではありません。

対処する必要がある2番目の部分は、メッセージのエンコードです。 WCFにとって、すべてのメッセージはXMLです。つまり、メッセージがWCFスタックに渡されると、実行時にXMLインフォセットのように見える必要があります。 FIXはXML(afaik)を使用しないため、少し適合させる必要があります。

次の2つの方法があります。

  1. 簡単な方法:サーバー/クライアントが特定のインターフェイスとデータ形式を使用し、FIXメッセージをその形式に変換するためのハードワークをすべてチャンネルに行わせると仮定します。これの最も簡単な例は、WCFコードで、1つのメソッドが文字列を取得し、FIXメッセージ文字列をそのコントラクトのデータコントラクトシリアライザーを満たすXML形式にカプセル化する単純なサービスコントラクトを使用することです。ただし、ユーザーコードでは、後でFIX形式のデコードを処理する必要があります。

  2. カスタムWCF MessageEncoderですべてのハードワークを実行します。少し複雑ですが、潜在的にクリーンで再利用可能です(より良いストリーミングなどのより複雑なこともできます)。

しかし、大きな疑問は、これに価値があるかどうかです。これにWCFを使用したい理由は何ですか?プログラミングモデルを活用しますか?これは重要な考慮事項だと思いますが、WCFが提供する抽象化にはコストがかかることにも留意してください。特に、非常にリアルタイムの要件がある場合、WCFの一部の問題が発生する可能性があります。これは、あなたが見ている金融環境の種類では一般的であると理解しています。

もしそうなら、WCFをスキップして少し金属に近づけることで、より良いサービスを受けることができるでしょう。とにかくソケットの作業を行う必要があるので、そこで検討する必要があります。

これが役立つことを願って:)

私は考えそうです。ほぼ正確に動作するはずのほぼシステムが動作しています(インターネットからのWCF over HTTP)。サーバープロバイダーはそれを許可したくないように思われたため、そのためには適切な権限が必要になります。

アップショット:なぜそうなのかわかりません。

そうではありません-MsはTCP / IP接続ハンドラーを非WCFサービスと通信させませんでした。彼らはあなたがそれを行うためにWebサービスを書くと仮定しました。

これについては、 SO

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top