2016-10-01 141 views
0

在應用程序級別之外使用註冊爲allowDefinition ='MachineToApplication'的節是錯誤的。此錯誤可能是由於虛擬目錄未被配置爲IIS中的應用程序。將WCF服務與其他應用程序發佈到外部IIS服務器

</service> 
    </services> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
     multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
<system.webServer> 

我理解,這是一個很常見的,模糊的錯誤,並有一噸的關於它的問題了,但他們都沒有解決我的問題。所以我會盡量做得更徹底,更具體:

這是一個WCFService,我通過FTP發佈到外部IIS服務器。我得到這個錯誤,當我嘗試在瀏覽器中查看網站在https://www.domain.com/correctdirectory/JobsService.svc

這是我Web.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=*token*" requirePermission="false" /> 
    </configSections> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5.1" /> 
    <httpRuntime targetFramework="4.5.1" /> 
    <customErrors mode="Off"></customErrors> 
    <httpModules> 
    </httpModules> 
    </system.web> 

    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="basicHttpBindingConfiguration"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None" proxyCredentialType="None"/> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <services> 
     <service name="WcfServiceAPI.Services.Validation.ValidationService"> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpBindingConfiguration" contract="WcfServiceAPI.Services.Validation.IValidationService"/> 
     </service> 
     <service name="WcfServiceAPI.Services.Jobs.JobsService"> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpBindingConfiguration" contract="WcfServiceAPI.Services.Jobs.IJobsService"/> 
     </service> 
    </services> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="ApplicationInsightsWebTracking" /> 
     <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" /> 
    </modules> 
    <directoryBrowse enabled="true" /> 
    <validation validateIntegratedModeConfiguration="false" /> 
    </system.webServer> 
    <entityFramework> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
</configuration> 

這裏是我所確信的東西:

  1. 項目是cleaned in both Debug and Release mode
  2. 項目以調試模式構建。
  3. IIS根中的Web.config與此Web.config不衝突。它基本上只是強制執行https,並處理不同的文件類型請求。
  4. 服務託管爲上的IIS應用程序(不只是一個虛擬目錄)

當我把它發佈到內部網絡上的服務器,有沒有其他網站或服務,它工作正常。

我知道我嘗試發佈的服務器上有很多其他應用程序,但我的應用程序位於根級別,所以這應該沒關係,對不對? 如果重要,我也知道這些應用程序中至少有一個是ASMX Web服務。服務器的所有者也不知道問題。

我也試着把我的項目降級到.NET 4.0,因爲我知道他的ASMX服務在那上面運行。

任何想法?

回答

0

我已經嘗試通過外部FTP客戶端(Total Commander)將目錄移動到虛擬目錄的根目錄,但沒有成功,但是當我使用Visual Studio的內置發佈工具並確保有一個空的時候Site Path,它終於開始工作。

我還不確定這是爲什麼,但我想我會在另一次,當我得到時間做一些研究。如果有人知道,評論將非常感謝!

相關問題