2011-01-14 21 views
1

.Netを使用してIISと統合する、非常に基本的ではあるが高性能なHTTPサービスをホストする方法を探しています。IISを使用し、WCFを使用しない基本HTTPサービス

私はHttpListenerを使用するオプションを検討しましたが、そのパフォーマンスは疑問ですが、同じポートでリッスンしている多くのサービスを実行しようとしています。

実際には、エンドポイントで始まるURLでリクエストをキャッチするWCFエンドポイントを持つことはできますが、何かで終了する可能性がある場合は、これが解決策になる可能性があります。

カスタムメタデータエンドポイント、カスタムディスカバリエンドポイント、およびリソースを使用してカスタムプロトコルをカプセル化するクライアントライブラリを構築しています。クライアントライブラリはエンドポイントとリソース(/他のエンドポイント)間の関連付けを自動的に行うため、このマッピングはコンパイル時には不明であるため、WCFの使用は不可能です。

もう1つの理由は、私たちはプラットフォームの独立性の方向に向かいつつあり、将来的にはIISをApacheに簡単に置き換えるオプションが必要だということです。

ありがとうございます!

答えて

2

あなたのサービスにはまだWCFを使用できると思います。

http://msdn.microsoft.com/en-us/library/ms730158.aspx

また、あなたのクライアントは、それが実行時バインディングとエンドポイントを構築することができます:IISの外をホスティングしているという点では、オプションを持っています。したがって、詳細は、.configのsystem.serviceModelセクションで指定する必要はありません。 .configファイルで指定できるものはすべてコードでも行うことができます。

[編集] すべてのエンドポイントをWCFに「指定」する必要はありません。実行時にアドレスを知っていれば、サービスプロキシを作成するコードに単純に渡します。 ChannelFactoryクラスを見て、バインディング(これは実行時にconfigやbulidから取得できます)とエンドポイント(エンドポイントはアドレスを指定することによって非常に簡単に作成できます)を渡すことができます。下の例では、エンドポイントアドレスは.configから来ていますが、コードのどこからでもそれを渡すことができます。

/// <summary> 
    /// Creates a service proxy from a binding name and address 
    /// </summary> 
    /// <typeparam name="T"></typeparam> 
    public static T Create<T>() 
    { 
     string endpoint = ConfigurationManager.AppSettings["FactoryEndPointAddress"]; 
     string bindingname = ConfigurationManager.AppSettings["FactoryBindingName"]; 
     var address = new EndpointAddress(endpoint); 
     var factory = new ChannelFactory<T>(GetBinding(bindingname), address); 
     return factory.CreateChannel(address); 
    } 
+0

ありがとうございますnixon。私はこれが可能だと思いますが、WCFにすべてのエンドポイントを指定する必要はなく、エンドポイントマッパーで分離したほうがよい通信レイヤーにそのようなロジックを配置する必要があるためです。私がコミュニケーション層にしたいのは基本的なHTTPだけです。これは、今後のIISで容易に置き換えることができるようにするためです。 – Mika

+0

私はWCFがおそらくまだ進んでいると思うので、何の問題もなく、いくつかのコードと説明を追加しました!見て、これが助けてほしいと思っています。 – nixon

関連する問題