2012-06-19 16 views
11

私はそれが欲しい方法で動作するWCFサービスを正常に作成しました。唯一の問題は、WCFサービスが実行している実際のマシン以外のものからWebサービスにアクセスできないことです。他のデバイスからlocalhost WCFにアクセスしていますか?

私はCassini Webサービスがローカルのみであることを理解しています。デスクトップアプリケーションでサービスが必要なときはいつでも、顧客システムでWCFサービスを実行できるようにしたいと思います。

誰でも.NET Framework以外のものをインストールすることなくこれを行う簡単な方法を知っている人はいますか?独自のアプリ/サービスでホストする

答えて

12

使用self-hosting

感謝。既にWCFサービスをお持ちの場合、Windowsサービスを作成してそこにホストするのは簡単なことです(リンクを参照)。

+0

私はすでにWebServiceHostを使用していますが、それは私にとってはうまくいかないようです。システムのIPにアクセスする:ポートがサービスページを表示しない –

+9

ファイアウォールであるか、または使用しているポートでホストするための十分な特権がユーザーにない可能性があります。 http://msdn.microsoft.com/en-us/library/ms733768.aspx – driis

+0

私が取る必要があるシナリオを説明できますか? RESTを使用している場合、JSベースのHTMLファイル –

3

WCFには、サービスをホストするWebサーバーは必要ありません。ただし、コンソール/ホストアプリケーションまたはWindowsサービスのいずれかを実行する必要があります。その後、起動時に、ServiceHostクラスのインスタンスを作成してサービスを公開することができます。 MSDNのサンプル:http://msdn.microsoft.com/en-us/library/system.servicemodel.servicehost.aspx

+1

あなたのWCFサービスがRESTベースのメソッド(WebGetなど)を使用している場合を除き、driisの回答 –

+1

に投稿したコメントを参照してください。 – Rich

+1

はい、RESTの基本メソッドを使用しています。他の考え? –

2

WCFサービスを実行するには、ホストプロセスが必要です。その周りに方法はありません。

ホストプロセスが(必要に応じて、展開モデル、ネットワークの制約などに応じて)デスクトップアプリケーションと同じである場合は、デスクトップアプリケーションにサービスを埋め込みます。この手法は、「インプロセス」WCFホスティングと呼ばれています。これは、基本的に、クライアントアプリケーションでサービスを「自己ホスティング」することです。このソリューションを採用する場合は、より最適なIPC(net.pipe)バインディングを使用し、潜在的なネットワーク/ファイアウォールに関するすべての考慮事項を削除してください。

サービスを別のコンピュータまたは別のプロセスで実行する必要がある場合は、ホストアプリケーションを使用または実装する必要があります。 IIS、WAS、AppFabric、およびWCFServiceHost(実稼働グレードのホストではありません)は、すぐに使用できるホストの例です。それらを使用できない、または使用したくない場合は、独自のホストアプリケーションを実装し、WCFサービスを「Self Host」する必要があります。あなたのアプリケーションは何でもかまいません:コンソール、デスクトップ、Windowsサービスなどユーザーがいつ、どのようにホストを起動するか心配する必要がない場合は、いつでも実行されていることを確認してください。自動的に起動するWindowsサービスが推奨されます。

クライアントとは異なるコンピュータでサービスを実行する必要がある場合は、サーバーとクライアント間のすべてのネットワークデバイスとソフトウェア(ファイアウォール、ルーター、ゲートウェイなど)がバインディング用に正しく構成されていることを確認してください働くバインディングが動作するプロトコル(http、tcpなど)とポート(80、443、808など)を意識してください。

0

ここには示唆がありますが、適切でない場合は無視してください:@driisとして自己ホストサービスを使用してください。それがあなたのシナリオに最適です。あなたのWCFサービス内でHTMLページをホストすることについて...はい、可能ですが、これは簡単な解決策ではありません。要約すると、カスタムメッセージフォーマッタを作成し、WCFが提供するデフォルトのメッセージフォーマッタをバイパスする必要があります。BehaviorExtensionElementから継承しなければならないHtmlBehaviorExtensionと、最後にIDispatchMessageFormatterを実装するHtmlFormaterを継承しなければならないWebHttpBehavior、HtmlBehaviorを作成する必要があります。次のリンクでは、カスタムフォーマッタに関する素晴らしい記事が見つかります。http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/03/wcf-extensibility-message-formatters.aspx

関連する問題