我在我的 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:
需要注意的是,不可能完全用代码编写 wcf 服务,即没有 app.config 文件。虽然服务有 ServiceMetadataBehavior 帮助器来创建元数据交换行为实现,但端点没有这样的东西。这是“设计”吗? 如何:使用代码发布服务的元数据
编辑2:
好的,所以上面的警告似乎不一定是正确的。下面是 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>
错误是:
在服务 PlaybackManager 实施的合同列表中找不到合同名称“IMetadataExchange”。将 ServiceMetadataBehavior 添加到配置文件或直接添加到 ServiceHost 以启用对此协定的支持。
问题是,如果我将 ServiceMetadataBehavior 属性添加到 PlaybackManager 类,我会得到上面的原始错误,即无法识别。有任何想法吗?