0

内部ネットワーク上に、basicHttpBindingを使用してIIS6によってホストされている多数のWCFサービスがあります。動的プロキシ「CreateChannel()」メソッドを使用してこれらのサービスを使用する既存のアプリケーションがいくつかあります。

データ使用量を最小限に抑えることが重要なセルラー接続を使用して、ネットワークの外部で実行されるモバイルアプリケーションを構築しているため、httpバインディングの代わりにnetTcpBindingを使用しようとしています。

私のアイデアは、「WCFプロキシ」を構築することです。これは基本的に、外部に公開されているサーバー上で実行され、net.tcpバインディングを使用してリッスンし、要求を内部httpサービスに変換/転送するサービスです。

現在、コードは非常に単純で、次のようになっています...

ChannelFactory factory=new System.ServiceModel.ChannelFactory<IFooService>("FooService",new System.ServiceModel.EndpointAddress("http://internalserver/FooService.svc");
IFooService fooService=factory.CreateChannel();

ServiceHost host = new ServiceHost(fooService, new Uri[] { new Uri("net.tcp://externalserver:50001/FooService")});

これは現時点では非常に単純なコードであり、障害のあるチャネルなどは考慮されていませんが、我慢してください。

私が抱えている問題は、fooService(ここではwcfによって生成されたプロキシ)でGetType()を呼び出すと、プロキシのクラスではなくIFooServiceが返されることです。WCFは、新しいサービスホストを作成するときにそれを嫌い、「「この」タイプはインターフェイス自体にすることはできません」というエラーが表示されます。最後の行に。

これはただの恐ろしい考えですか?そうでない場合、それを実行するための最良の方法は何ですか?svcutilで生成されたプロキシの使用を強制されますか?

4

1 に答える 1

2

現在のWCF3.5では、これを自分で行う必要があります。優れた2部構成の記事を参照してください。

ミケーレ・ルルー・ブスタマンテ作。

おそらく2010年3月に.NET4でリリースされるWCF4では、WCF 4にはすでに基本の「RoutingService」クラスが含まれているため、状況ははるかに簡単になります。このトピックについては、RonJacobsによるEndpoint.TVビデオインタビューを参照してください。

マーク

于 2009-11-12T12:36:41.263 に答える