2010-01-20 14 views
15

我有一個WCF服務,託管在IIS 7.5中。 我有兩臺服務器,一臺用於測試,一臺用於生產。WCF主機:可以訪問svc文件但無法轉到wsdl鏈接

該服務在測試服務器上正常工作,但在生產服務器上出現以下錯誤。

當我訪問地址http //..../ service.svc我可以看到,上面寫着默認頁:


您已經創建了一個服務。

要測試此服務,您需要創建一個客戶端並使用它來調用該服務。您可以使用svcutil.exe的工具從以下語法在命令行中執行此操作:

svcutil.exe的http://..../service.svc?wsdl

這將生成一個配置文件,包含客戶端類代碼文件。將這兩個文件添加到您的客戶端應用程序,並使用生成的客戶端類來調用服務。


但是當我點擊wsdl鏈接時,我無法進入wsdl頁面。它使我返回到這個默認網頁,沒有任何錯誤。我懷疑網絡/防火牆授權錯誤,但有沒有人有這樣的經驗?

測試和生產服務器的所有IIS設置都是相同的。

謝謝,最好的問候。

+0

您是否配置了mex端點? – 2010-01-20 10:18:14

+0

是的,我確實有mex端點。 – 2010-01-20 11:56:19

+0

你有沒有在你的服務前提供某種路由器/負載均衡器來引入重定向問題? – 2010-01-22 15:43:11

回答

12

你基本上需要三樣東西,使瀏覽到您的WSDL的WCF服務:

  1. 服務行爲,使服務元數據
  2. 設置該服務元數據行爲httpGetEnabled = True以允許HTTP瀏覽在您的服務元數據
  3. 一個MEX終結

所以你在服務器端的威力配置看起來是這樣的(加了更多的位STU FF):

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="MetadataBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <services> 
     <service behaviorConfiguration="MetadataBehavior" name="YourService"> 
     <endpoint address="" 
        binding="basicHttpBinding" 
        contract="IYourService" /> 
     <endpoint address="mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" /> 
     </service> 
    </services> 
    </system.serviceModel> 

點1和2是通過這條線在這裏處理:

<serviceMetadata httpGetEnabled="true" /> 

您需要引用服務行爲在<service>標籤使它成爲活躍。

3點(MEX端點)本節在這裏:

<endpoint address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 

對於HTTP,使用mexHttpBinding,和IMetadataExchange合同是元數據交換的WCF系統的合同。

+0

我同意。 所有這些配置都正確設置。 我忘了提及一個重要細節:服務在我的測試服務器上正常工作,但是當我將服務部署到我的生產服務器時出現此錯誤。抱歉給你帶來不便。 – 2010-01-20 11:53:12

10

也有同樣的問題。

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 

也許它可以幫助別人:我加入httpsGetEnabled到serviceBehaviors>行爲這樣的固定它。不要以爲你需要4年後提示=)

+1

我不能滿足這一點。我的問題是我有許多使用WSDL的服務,但沒有。沒有工作的人需要成爲「http ** s ** GetEnabled」(用「s」)而不是「httpGetEnabled」。 – Turnerj 2016-04-29 07:05:11

-1

是的問題是與發佈元數據。只需添加一個提示。您也可以使用代碼添加服務元數據,如:

ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
smb.HttpGetEnabled = true; 

host.Description.Behaviors.Add(smb); 

更多細節在這裏: http://msdn.microsoft.com/en-us/library/aa738489%28v=vs.110%29.aspx

1

我知道這個問題的答案是這麼晚了,但我有同樣的問題和解決辦法是:

在接口上添加標籤[ServiceContract][OperationContract],它在服務.svc上實施。當您選擇WCF Service時,Visual Studio會創建界面,但我刪除了界面,並創建了自己的界面。

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    void DoWork(); 
} 

我希望能幫助別人。

相關問題