在應用程序級別之外使用註冊爲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>
這裏是我所確信的東西:
- 項目是cleaned in both Debug and Release mode。
- 項目以調試模式構建。
- IIS根中的Web.config與此Web.config不衝突。它基本上只是強制執行https,並處理不同的文件類型請求。
- 服務託管爲上的IIS應用程序(不只是一個虛擬目錄)
當我把它發佈到內部網絡上的服務器,有沒有其他網站或服務,它工作正常。
我知道我嘗試發佈的服務器上有很多其他應用程序,但我的應用程序位於根級別,所以這應該沒關係,對不對? 如果重要,我也知道這些應用程序中至少有一個是ASMX Web服務。服務器的所有者也不知道問題。
我也試着把我的項目降級到.NET 4.0,因爲我知道他的ASMX服務在那上面運行。
任何想法?