同じタイトルの他の質問があることを私は知っています。私は彼らの解決策を無駄に試しました。
に登録した後、サービス(Windowsホスト)を開始しようとすると、このメッセージが表示されinstallutil
ます。
経験がありませんWCF
ので、しばらくお待ちください。
私のサービスアプリケーションは、2つのプロジェクトで構成されています。外部にはサービスインターフェイス、クライアントインターフェイス、データコントラクトとapp.configがあり、内部にはサービス実装が含まれています(ホストであり、実際の実装は別のファイルで行われます)。これは私のサービスインターフェースから継承されていないので、それが良い習慣かどうかはわかりません)。
私のapp.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="Internals.ExecutionService" behaviorConfiguration="Default">
<endpoint name="TCPEndpoint"
address="net.tcp://localhost:8080/ExecutionService"
binding ="netTcpBinding"
contract="Externals.IExecutionService"/>
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExhange"/>
<host>
<baseAddresses>
<add baseAddress="netTcp://localhost:8080/ExecutionService"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
私のインターフェース:
using System.ServiceModel;
namespace Externals
{
[ServiceContract(CallbackContract = typeof(IClientCallback))]
public interface IExecutionService
{
/// <summary>
/// Executes the mainflow.py file in the provided location.
/// </summary>
/// <param name="path">Path to the Python file.</param>
/// <returns>Execution status. Expected to return Passed/Failed onlt.</returns>
[OperationContract]
ExecutionStatus Execute(string path);
[OperationContract]
ExecutionStatus GetStatus();
}
}
および実装(実際にはまだ準備ができていません。クライアントにサービス参照を追加してもらうことができるかどうかを確認しようとしています):
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, IncludeExceptionDetailInFaults = true, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
public partial class ExecutionService : ServiceBase, IExecutionService
{
ServiceHost myHost;
private IClientCallback callbackChannel;
public ExecutionService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
myHost = new ServiceHost(typeof(ExecutionService));
myHost.Open();
}
}
そして、インターフェースの空の実装。
完全なエラー:
Service cannot be started. System.InvalidOperationException: Service 'Internals.ExecutionService' has zero application (non-infrastructure) endpoints. This might be because no configuration file was found for your application, or because no service element matching the service name could be found in the configuration file, or because no endpoints were defined in the service element.
at System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreApplicationEndpoints(ServiceDescription description)
at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost)
at System.ServiceModel.ServiceHostBase.InitializeRuntime()
at System.ServiceModel.ServiceHostBase.OnBeginOpen()
at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open()
at Internals.ExecutionService.OnStart(String[] args) in C:\Users...
イベントビューアから取得。