次のシナリオがあります。
- ボックス X のプログラム P (完了するまでに最大 30 分かかる場合があります)。
- ボックス Y の WinForms アプリケーション - P の入力基準を収集します。
- P は非常に時間がかかるため、常に Y ではなくボックス X で実行する必要があります。
X で WCF サービス アプリケーションを使用するようにアドバイスされました。サービス コントラクトを介して Y から X にメッセージを送信すると、プログラム P が起動されます。
これは WCF Service App プロジェクトの有効な使用法ですか?
私は次の 2 つのウォークスルーに従いました。
私は今、お互いに話しているように見える 2 つのプロジェクトを持っています。コンソール アプリから次のコードを実行できますmoveData
。WCF プロジェクトにあるメソッドは、パラメーターに基づく情報でデータベースを正常に更新します。
static void Main(string[] args) {
Service1Client sc = new Service1Client();
sc.moveData(0,1);
sc.Close();
}
私はこの種の技術に非常に慣れていません - 注意してください。次の質問:
WCF プロジェクトを開いているか、Visual Studio で実行している場合にのみ機能します - これは予想どおりですか? つまり、WCF が実行されていない場合、消費するアプリはエラーをスローする必要がありますか?
つまり、WCF プロジェクトで Vis Studio のインスタンスを閉じてから、消費するアプリケーションを実行しようとすると、エラーが表示System.ServiceModel.EndpointNotFoundException was unhandled There was no endpoint listening at...followed by address of service
されます。ボックス X にこの WCF を利用させるにはどうすればよいですか? そのボックスに何をインストールまたは展開する必要がありますか?
コンシューマー コンソール アプリの app.config は次のようになります。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://....svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
name="BasicHttpBinding_IService1" />
</client>
</system.serviceModel>
</configuration>