0

変な質問になりますが、

現在、自分の Web サイトで wcf サービスを実行しています (Visual Studio 2012 - .scv ファイルで作成)。組み込みのwcfテストクライアントに加えて、接続をテストしようとするコンソールクライアントがあります。テスト クライアントは正常に動作し、関数を呼び出すことができますが、サイト/テスト クライアントの実行を停止しても (これは拡張機能によるホストを意味するはずですよね?)、コンソール クライアントは引き続き実行され、サービスと対話することができます。大丈夫。
また、ブラウザーで実行されていない WCF サービス ページにアクセスすることもできます。コンソールで WCF を作成したとき、ホストが実際に実行されていない間は、これらのことを行うことができませんでした。このため、私が見ていないコードに何か問題があるのではないかと思っています。

サーバーでウェブサイトをオンラインにしようとすると、これが問題に発展するのを見ることができました(テストクライアントがサービスと同じマシンに配置されないためです。実行していないときでもファイル)。

どうすればいいですか / 何が問題なのですか?

お時間をいただきありがとうございます。

関連する web.config コード:

  <system.serviceModel>
    <services>
<!-- ICanHasGamez=solution that holds the webpage&wcfservice -->
      <service name="ICanHasGamez.APIHost" behaviorConfiguration="behavior">
        <endpoint address="" binding="basicHttpBinding" contract="ICanHasGamez.IAPIHost">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name ="behavior">
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

コンソール クライアントからの app.config コード:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IAPIHost" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:2105/APIHost.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IAPIHost" contract="ServiceReference1.IAPIHost"
                name="BasicHttpBinding_IAPIHost" />
        </client>
    </system.serviceModel>
</configuration>
4

2 に答える 2

2

Web タブの下の Web サイト プロジェクトのプロパティで、IIS でホストしていますか? その場合、組み込みの WCF テスト クライアントを使用していなくても、WCF サービスは実行され続けます。IIS は、Visual Studio 環境の外で単独で実行されます。必要に応じて、IIS マネージャーでサービスを停止することでサービスをオフにすることができますが、それ以外の場合は VS の外部で使用できます。

対照的に、コンソール (自己ホスト型と呼ばれる) で WCF サービスを実行すると、ホスト アプリケーション (つまり、コンソール アプリケーション) が終了すると終了します。

つまり、Web プロジェクトにローカル IIS を使用している場合、これは間違ったことではなく、予期される動作です。また、テスト クライアントとは別のマシンでサービスを実行することに関しては、問題ありません。IIS で実行している場合は、ホスティング コンピューターで IIS をオンにし、そのプロジェクトを IIS で実行するだけで済みます。出来上がり!サービスを自己ホストとして実行している場合、つまりコンソールで実行している場合は、コンソールを開いたままにします。自己ホスト型 wcf と IIS の長所と短所のいくつかについては、この StackOverflow の質問を確認してください(受け入れられた回答はその特定の OP に少しローカルですが、以下の回答はより有益です)。

これがお役に立てば幸いです。ここで間違ったツリーを吠えていないことを願っています。

于 2013-05-26T00:44:00.183 に答える
2

あなたが説明したシナリオに問題はありません-予想される動作です。

IIS で WCF サービスをホストする場合、IIS が稼働している限り (そして他に問題がない限り)、サービスは要求を受け取ることができます。サービス ホストが破棄された場合 (非アクティブ タイムアウトまたはその他の理由により)、新しい要求が受信されると、IIS は新しいインスタンスをスピンアップします。

一方、コンソール アプリなどで WCF サービスを自己ホストしている場合、そのサービスが要求に応答できるのは、自己ホスト アプリケーションが実行されているときだけです。

したがって、あなたの質問に答えるために、あなたは何も悪いことをしていませんし、何か違うことをする必要もありません。WCF サービスをリモート サーバーにデプロイするだけで、クライアントからアクセスできるはずです。

于 2013-05-26T00:44:13.630 に答える