2011-12-01 13 views
3

當我瀏覽到.svc時,我不斷收到錯誤:此服務的元數據發佈當前已禁用。直接瀏覽時WCF元數據不可用

我遵循了錯誤頁面上列出的所有說明(添加了行爲,引用行爲,添加了mex端點,嘗試使用和不使用baseaddress)以及MSDN上的說明:http://msdn.microsoft.com/en-us/library/ms734765.aspx(幾乎相同,但包括政策)。我甚至燒燬了我的配置文件,只留下了這個東西 - 它根本沒有任何區別。我已經確認配置文件正在被使用(即在其中發生錯誤,並且錯誤發生變化)。

節的樣子:

<system.serviceModel> 
    <services> 
    <service name="HoldingService" behaviorConfiguration="SimpleServiceBehavior"> 
     <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost/xxxx.cdf.holding/HoldingService.svc"/> 
     </baseAddresses> 
     </host> 
     <endpoint address="" 
       binding="basicHttpBinding" 
       contract="Xxx.Xxxx.Schema.Service.Cdf.Holding.IHoldingService" /> 
     <endpoint address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 
    </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="SimpleServiceBehavior"> 
     <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

有什麼辦法都解決或調試呢?

+0

FWIW,系統是運行IIS 5.1和VS2010的WinXP。 – Mark

回答

3

我設法解決這個問題。問題是name="HoldingService"。即使.svc與.config位於同一項目中,也需要完全限定(即name="Xxx.Xxxx.Web.Cdf.Holding.HoldingService")。

最終的代碼看起來像這樣和完美的作品:拋開

<system.serviceModel> 
    <services> 
    <service name="Xxx.Xxxx.Web.Cdf.Holding.HoldingService" behaviorConfiguration="SimpleServiceBehavior"> 
     <endpoint address="" 
       binding="basicHttpBinding" 
       contract="Xxx.Xxxx.Schema.Service.Cdf.Holding.IHoldingService" /> 
    </service> 
    </services> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior name="SimpleServiceBehavior"> 
     <serviceMetadata httpGetEnabled="True" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

作爲,我結束瞭解決的辦法,這是通過使用「微軟服務配置編輯器」(通過Tools>WCF Service Configuration Editor在VS2010訪問)。我不知道這是否存在,並且已經手動切換配置。

感謝邁克爾的建議 - 他們清理了很多代碼。

1

可能很愚蠢,但可以嘗試從serviceMetadata行爲中刪除策略版本。我從來沒有見過這種需要。您還可以刪除MEX終結點,只是瀏覽...

http://localhost/xxxx.cdf.holding/HoldingService.svc 

MEX終結點是對於像命名管道和這樣的元數據交換。只要你有一個http端點,應該這樣做。

此外,由於您在IIS中託管,它看起來像基地址可能不被使用。只需放下該部分,然後轉到您在IIS中擁有svc文件的位置。

+0

感謝您的建議,我用它們清理了很多代碼。 – Mark

+0

很酷。它是否解決了MEX問題? –

+0

不幸的是,但我確實設法解決它。我還沒有意識到我需要完全限定服務名稱。事後明顯(因爲配置文件不在服務的命名空間中)! – Mark

相關問題