2012-01-15 4 views
4

Visual Studioのクライアントプロジェクトがmexバインディングを持たないWCFサービスをどのように参照できるのだろうかと思っていました。すべてのサンプルWCF​​サービスでデフォルトのmexバインディングを削除すると、クライアントアプリケーションはサービスを見つけることができず、自動生成されたコメントでは、運用環境ではmexバインディングを削除する必要があります。それでは、クライアントアプリケーションはどのようにサービスを見つけて参照するのでしょうか?mexバインディングを使用しないWCFサービスの参照

答えて

0

mexエンドポイントは、WCF SOAPサービスの必要な部分です。これは、クライアントツールキットがWSDLをプルダウンしてプロキシクラスを自動生成できるようにするものです。あなたが指摘しているように、それがなければ、クライアントは情報を取得してサービスを利用する方法がありません。クライアントがサービスを利用して見つけることができるようにするには、サービスが稼動しているときに利用可能にしておく必要があります。

+0

ありがとうジョー。あなたはWCF SOAPサービスについて言及しましたが、私の考えでは別の質問が発生しました。 WCFはSOAP以外のサービスを提供していますか? SOAPサービスとは何でしょうか? – user1137993

+0

WcfはSOAPおよびRESTfulサービスをサポートしています。石鹸サービスは、ws- *プロトコルに基づいた膨大な量の機能(トランザクション、セキュリティなど)を提供します。しかし、それらはより複雑になりがちであり、通常、クライアントツールキットを使用する必要があります。安心して使えるサービスは、すぐに使える機能が少なく、軽量で使いやすいものです。実際に使用するかどうかの選択はアプリケーションによって異なります –

+2

これは完全な話ではありません。クライアントプロキシを自動生成せずにWCFクライアントを使用することができます。代わりに、サービスコントラクトのアセンブリを参照し、ChannelFactoryを使用してプロキシを提供します。プロキシを呼び出すと、呼び出しはクライアントの設定ファイルから転送とバインディングなどを使用します。 @ hughの答えを参照してください。 – saille

10

サービスコントラクト、オペレーション、およびデータコントラクトを定義するタイプを含むアセンブリにアクセスできる場合は、ChannelFactoryを使用してオンザフライでプロキシを作成することができます。この場合、サービスを呼び出すために必要なすべての情報に既にアクセスしているので、サービスメタデータを取得する必要はありません。あなたは、クライアントの設定にそこから出エンドポイントの詳細をコピーすることができますので、あなたはサービス側の設定ファイルへのアクセス権を持っている場合、それはまた助け例

// Create service proxy on the fly 
var factory = new ChannelFactory<IMyServiceContract>("NameOfMyClientEndpointInConfigFile"); 
var proxy = factory.CreateChannel(); 

// Create data contract 
var requestDataContract = new MyDataContract(); 

// Call service operation. 
var responseDataContract = proxy.MyServiceOperation(requestDataContract); 

については

関連する問題