2010-12-08 23 views
3

質問の内容.NETを利用できないネイティブアプリケーションからWCF "世界"とどのようにインターフェースしますか?WCFはネイティブ(C++)アプリケーションとの間で使用できますか?

EDIT:申し訳ありませんが、WCFがそのような広いスペクトルをカバーしているように見えますが、より具体的なはずです。私は、通信/ IPCメカニズムとしてWCF/TCP通信を使用するいくつかのアプリケーションがあり、.NETが利用できないネイティブ(C++)アプリケーションを統合する必要があると考えていました。

+1

あなたは正確に何を意味するのですか? WCFサービスを呼び出してホストし、1つを作成しますか?どのような種類ですか? –

+1

あなたはそれで「インターフェース」とはどういう意味ですか?たとえば、他のC++ APIを使用すると、おそらくWCFアプリケーション(SOAPを使用)へのクライアント(またはサーバー)を構築できますが、管理されたC++がなければMSライブラリを直接使用することはおそらく不可能です。 –

答えて

5

WCFはプロトコルにとらわれません。しかし、あなたはWCFと通信する方法でこれを考慮する必要があります:

相手側が使用できるメッセージを送信できる限り、問題なく使用できます。

1)名前付きパイプは、結合:それは可否及び使用することは困難である外部.NET

2)TCPバインディング:それが妥当と

3)basicHttp結合外側.NET

使用することは困難である:それ外部に実装するのが最も簡単です。

4)wsHttpバインディング:ws *メッセージを作成して使用できるライブラリがあれば、問題はありませんが少し難しいです。

5)RESTのAPI:それは確かに最も簡単であり、あなたがあなたに提供されるサービスの種類を管理している場合、私はこの1 をお勧めします。

+0

こんにちはAliostad、同じマシンでプロセス間通信が必要で、WCF RESTサービスにデータを送信する必要があるJavaまたはC++クライアントプロセスがある場合、オプション番号5(REST)を使用できますか?第一 –

0

「WCFの世界」が何を言っているのか分かりません。 WCFを使用して、古いSOAP 1.1形式または最新のWS-Securityを使用してSOAP Webサービスを実装できます。ですから、あなたの質問は次のようになります.C++からSOAP Webサービスを呼び出すことはできますか?その答えは明らかに「はい」です。

5

はい、です。アンマネージドC++アプリケーションとWCFを使用する他のアプリケーションとの通信が可能です。私の特別な状況では、WCFを使用してWindowsサービスと通信するために、従来のMFC実行可能ファイルを変更しました。

基本的な考え方は、C#を使用して.NETアセンブリにWCFクライアントコードを記述することです。次に、C++ dllを使用して、アンマネージC++コードと.NETアセンブリの間のギャップを埋める。

私はこれを行う方法に関するいくつかのステップバイステップの手順を持っていますhere

+0

:このヘッドアップし、あなたの(!偉大な)説明へのリンクをお寄せいただきありがとうございます。第2回:Qにおけるユーザーgaletsあなたは私がそうでない場合は100%ネイティブプロセスにCLRで引っ張って避けたかったつまりこと、へのリンクとして残念ながら、私は同じ問題を抱えています。 –

+0

3点。まず、CLRとの相互作用は、C#アセンブリ(明らかに)およびC++「ブリッジ」DLLに限定されます。このソリューションは、ネイティブのC++アプリケーションとDLLに直接のCLR依存関係を強制しません。次に、Windows 7から.NET 3.5 SP1がOSコンポーネントとして組み込まれ、デフォルトでインストールされます。第3に、古いバージョンのWindowsでは、常に必要な.NETインストーラを提供できます。 –

+0

私はおそらく、それ自体の依存関係は心配していませんが、純粋にコミュニケーションを促進するために、ネイティブプロセス内でCLR VMを実行することについて言及してください。 –

1

標準SOAPプロトコルを使用していない "WCF World"が問題です。 NetTcpBindingおよびNetNamedPipeBindingには、説明されているように、何らかの種類の管理されていないブリッジが必要です。答えは明らかに「はい」ではありません。これは、WFCサービスによって提供されるバインディングに依存します。

2

Windows 7およびWindows 2008 R2以降のOSでWindows Web Services APIを使用すると、ネイティブコードから(管理コードにブリッジせずに)WCFサービスを使用できます。 WWSAPIは、WS- *および.NET- *プロトコルファミリをサポートするSOAPのネイティブコード実装であり、メモリオーバーヘッドが最小限に抑えられています。

WWSAPIには、サービス記述文書からインターフェイス用のCスタブコードを生成するのに便利なものが含まれています。サービスモデルメタデータツールSvcUtil documented hereを使用して、WSDLサービス記述文書を生成できます。

WWSAPIを使用してネイティブコードからWCFサービスを呼び出す方法をデモンストレーションhelpful MSDN blog記事もあります。

あなたがC++ 11でコーディングしていると、あなたのWCFサービスは、RESTインターフェースを公開する場合は、より現代的な代替APIがある(また、Microsoftによる)カサブランカと呼ばれるRESTサービスを消費するため、MSDN hereに文書化、およびcodeplex here上でホストされています。

関連する問題