我在C++/CLI dll項目(VS2012 Express)中引用System :: ServiceModel。以下代碼失敗,出現以下錯誤,我找不到如何修復它。未找到ServiceMetadataBehavior屬性WCF C++/CLI
錯誤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();
};
EDIT1:
需要說明的情況是,這是不可能的代碼,即完全寫的WCF服務沒有一個應用程序.config文件。雖然Service具有ServiceMetadataBehavior幫助器來創建元數據交換行爲實現,但Endpoint沒有這樣的事情。這是「按設計」嗎? How to: Publish Metadata for a Service Using Code
EDIT2:
OK,所以需要注意上面似乎沒有要,一定是正確的。下面是代碼中我想要做的事情的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執行合同的名單 被發現。直接向配置文件或 ServiceHost添加 ServiceMetadataBehavior以啓用對此合同的支持。
問題是,如果我將ServiceMetadataBehavior屬性添加到PlaybackManager類,我得到上面的原始錯誤,它不被識別。有任何想法嗎?