我们已经使用 .Net 4.5 在 Visual Studio 2013 中创建了一个网络服务。该网络服务在同一台计算机上本地运行良好。
现在我们想将此 Web 服务导出到带有 IIS 的 Windows Server 2008。我们已经制作了一个在端口 8080 上运行的 Web 服务。
但是当我们将导出的文件复制到这个网络服务器的根目录时,出现了以下错误:
Error Summary
HTTP Error 500.19 - Internal Server Error
The requested page cannot be accessed because the related configuration data for the page is invalid.
Detailed Error Information
Module
IIS Web Core
Notification
Unknown
Handler
Not yet determined
Error Code
0x80070032
Config Error
The configuration section 'system.serviceModel' cannot be read because it is missing a section declaration
Config File
\\?\C:\inetpub\wwwroot\YOR24Websevices\web.config
Requested URL
http://localhost:8080/
Physical Path
Logon Method
Not yet determined
Logon User
Not yet determined
Config Source 10: </system.web>
11: <system.serviceModel>
12: <bindings>
我们在Visual Studio中导出的webconfig是:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="RightNowSyncBinding">
<security defaultAlgorithmSuite="Default" authenticationMode="UserNameOverTransport"
requireDerivedKeys="true" securityHeaderLayout="Lax" includeTimestamp="false">
<localClientSettings detectReplays="false" />
<localServiceSettings detectReplays="false" />
</security>
<textMessageEncoding messageVersion="Soap12" />
<httpsTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://tkbc-fleetsupport--tst.custhelp.com/cgi-bin/tkbc-fleetsupport--tst.cfg/services/soap"
binding="customBinding" bindingConfiguration="RightNowSyncBinding"
contract="RightNowServiceReference.RightNowSyncPort" name="RightNowSyncPort" />
</client>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="Yor24Service.Service">
<endpoint address="" contract="Yor24Service.IService" binding="basicHttpBinding"/>
<endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding"/>
</service>
</services>
<protocolMapping>
<add binding="basicHttpBinding" scheme="http" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
这个生成的配置文件有什么问题?
最佳答案
从 .Net Framework 4 开始,服务行为不需要名称 ( MSDN )。在 .Net 4 之前,它是强制性的。因为你的服务行为没有名字:
<serviceBehaviors>
<behavior>
<!-- name attribute missing in behavior -->
</behavior>
</serviceBehaviors>
并且 IIS 抛出错误我怀疑您的应用程序池未运行 .Net 4 或更新版本。
关于c# - 无法读取配置部分 'system.serviceModel',因为它缺少部分声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21160031/