ステートレスサービスファブリックプロジェクトをソリューションに追加し、WebApiセルフホストとしてセットアップしました。 VisualStudioによって追加されたファイルには何も触れていません。わずかに問題が発生したのは、ソリューションファイルのGitマージエラーだけでした。そのため、プロジェクトを手動で再度追加する必要がありました。
プロジェクトの名前は次のとおりです。
デプロイしようとすると、次のエラーが発生します。
C:\ SfDevCluster\Data\ImageBuilderProxy\AppType\ClientCore.CommandStackApi.DeployTypeにあるアプリケーションのBuildLayoutが無効です。 ServiceClientCore.CommandStackApiPkgのServiceManifest.xmlがありません。
ファイルと、考えられるすべてのプロジェクト設定を他のService Fabricプロジェクトと比較すると、すべて正常に見えますが、サービスマニフェストが欠落していると不平を言い続けます。私が気付いた唯一のことは、SFプロジェクトにCommandStackApiプロジェクトへの依存関係がないことでしたが、これは何も変更しませんでした。
私は2つの異なるコンピューターで試しましたが、最後のコンピューターにはService FabricSDKなどが新しくインストールされました。
すべてのプロジェクトを削除してすべてを再設定すればうまくいくと思いますが、これは以前にも、MSDNガイドからデプロイパッケージとPowerShellスクリプトを正確に作成しようとしたときに発生したので、何についての洞察が必要です。私は間違っているかもしれません。これがより成熟したプロジェクトで発生した場合、ソリューションを最初から再作成してVisual Studioブラックボックスの魔法のセットアップを利用するオプションはありません。これは、舞台裏で行う必要があります。何が間違っているのか、どんなアイデアでもいただければ幸いです。
それで私はついに何が悪かったのかを理解しました。
ファイルとプロジェクトの依存関係を調べていましたが、不足しているサービスの依存関係を見逃していました。 2つのプロジェクトがマージによってソリューションから削除されたとき、SFプロジェクトはサービス参照を失っていたに違いありません。これを再び追加すると、問題が修正されました。
既存のServiceFabricプロジェクト(.csproj)をServiceプロジェクト(.sfproj)に追加したとき、\ ApplicationPackageRoot\ApplicationManifest.xmlファイルに2つのセクションを手動で作成する必要がありました。
例:
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Sample.Service.Commander" ServiceManifestVersion="1.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="EndpointConfigSection">
<Parameter Name="UseDifferentPorts" Value="[StatelessServices_UseDifferentPorts]" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
<Policies>
<EndpointBindingPolicy EndpointRef="OwinEndpoint" CertificateRef="ClusterCert" />
<EndpointBindingPolicy EndpointRef="OwinEndpoint0" CertificateRef="ClusterCert" />
<EndpointBindingPolicy EndpointRef="OwinEndpoint1" CertificateRef="ClusterCert" />
<EndpointBindingPolicy EndpointRef="OwinEndpoint2" CertificateRef="ClusterCert" />
<EndpointBindingPolicy EndpointRef="OwinEndpoint3" CertificateRef="ClusterCert" />
<EndpointBindingPolicy EndpointRef="OwinEndpoint4" CertificateRef="ClusterCert" />
</Policies>
</ServiceManifestImport>
そして
<Service Name="Commander">
<StatelessService ServiceTypeName="CommanderType" InstanceCount="[MyService_InstanceCount]">
<SingletonPartition />
</StatelessService>
</Service>
サービスプロジェクトの依存関係をファブリックプロジェクトに追加して削除しましたが、機能しました。