C ++ / CLI dllプロジェクト(VS2012 Express)でSystem::ServiceModelを参照しています。次のコードは次のエラーで失敗し、修正方法が見つかりません。
エラーC2337:'ServiceMetadataBehavior':属性が見つかりません
[System::ServiceModel::ServiceContractAttribute]
[System::ServiceModel::Description::ServiceMetadataBehavior]
public ref class PlaybackManager
{
public:
~PlaybackManager() { this->!PlaybackManager(); }
!PlaybackManager() { }
// Playback action methods
[System::ServiceModel::OperationContractAttribute]
void Play();
[System::ServiceModel::OperationContractAttribute]
void Stop();
[System::ServiceModel::OperationContractAttribute]
void Pause();
[System::ServiceModel::OperationContractAttribute]
void Previous();
[System::ServiceModel::OperationContractAttribute]
void Next();
[System::ServiceModel::OperationContractAttribute]
void Random();
};
編集1:
これに対する注意点は、コードを使用して、つまりapp.configファイルを使用せずにwcfサービスを完全に作成することはできないということです。サービスには、メタデータ交換動作の実装を作成するためのServiceMetadataBehaviorヘルパーがありますが、エンドポイントにはそのようなものはありません。これは「設計による」ですか? 方法:コードを使用してサービスのメタデータを公開する
EDIT2:
わかりました。したがって、上記の警告は必ずしも正しいとは限りません。以下は、コードで実行しようとしていることを表すapp.configです。エンドポイントクラスの実装にServiceMetatdataBehavior属性を削除すると、同じエラーが発生します。
<configuration>
<system.serviceModel>
<services>
<service name="Engine.PlaybackManager">
<endpoint
address="net.tcp://localhost:7008/PlaybackManager"
binding="mexTcpBinding"
contract="IMetadataExchange"
/>
<endpoint
address="net.tcp://localhost:7008/PlaybackManager"
binding="netTcpBinding"
contract="Engine.PlaybackManager"
/>
</service>
</services>
</system.serviceModel>
</configuration>
エラーは次のとおりです。
コントラクト名「IMetadataExchange」が、サービスPlaybackManagerによって実装されたコントラクトのリストに見つかりませんでした。ServiceMetadataBehaviorを構成ファイルまたはServiceHostに直接追加して、このコントラクトのサポートを有効にします。
問題は、ServiceMetadataBehavior属性をPlaybackManagerクラスに追加すると、上記の元のエラーが発生し、認識されないことです。何か案は?