Dot-Net
在服務實施的契約列表中找不到 IMetaDataExchange
我在網上搜尋了這個錯誤的解決方法,但我發現的一切都表明我所擁有的都是正確的。
也許有人可以看看並發現一個我看不到的明顯錯誤。
我有一個 Windows 服務,託管兩個契約:
- 配置服務
- IConfigurationAdminService
管理服務繼承自標準服務,因為我希望兩個契約都實現基本方法。
問題是我可以很好地託管服務,直到我嘗試添加 MEX。
然後我得到以下異常:
在服務“ConfigurationWCFService”實施的契約列表中找不到契約名稱“IMetaDataExchange”。
這是我的配置,一切都由配置配置,沒有通過程式碼完成。
<system.serviceModel> <bindings> <netTcpBinding> <binding name="tcpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" /> <security mode="None" /> </binding> </netTcpBinding> </bindings> <services> <service behaviorConfiguration="serviceBehavior" name="BrightsideGroup.Repa.Configuration.ConfigurationWCFService"> <endpoint address="ConfigurationService" binding="netTcpBinding" bindingConfiguration="tcpBinding" name="tcpConfiguration" contract="BrightsideGroup.Repa.Configuration.IConfigurationWCFService" /> <endpoint binding="mexHttpBinding" address="mex" name="mex" contract="IMetaDataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://GD01316:9123/Repa" /> <add baseAddress="http://GD01316:8123/Repa" /> </baseAddresses> </host> </service> <service behaviorConfiguration="serviceBehavior" name="BrightsideGroup.Repa.Configuration.ConfigurationWCFAdminService"> <endpoint address="ConfigurationAdminService" binding="netTcpBinding" bindingConfiguration="tcpBinding" name="tcpConfigurationAdmin" contract="BrightsideGroup.Repa.Configuration.IConfigurationAdminWCFService" /> <endpoint binding="mexHttpBinding" address="mex" name="mex" contract="IMetaDataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://GD01316:9124/Repa" /> <add baseAddress="http://GD01316:8124/Repa" /> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="serviceBehavior"> <serviceMetadata httpGetEnabled="true" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
您的大小寫不正確 - WCF 配置區分大小寫
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />請注意,“D”不是大寫的。
IMetadataExchange您可以仔細檢查MSDN 上的語法。
我正在為所有人使用 NetTcpBinding。就我而言,我遇到了同樣的問題並通過添加解決了它:
(a) 到 mex 端點的 behaviorConfiguration=""
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" behaviourConfiguration="" />(b) 服務定義的 behaviorConfiguration=“mex”:
<services> <service name="AcmeService" behaviourConfiguration="mex">(c) 行為入口
<behaviors> <serviceBehaviors> <behaviour name="mex"> <serviceDebug includeExceptionDetailInFaults="false"/> <serviceMetadata /> </behavior> </serviceBehaviors> </behaviors>