我在框架4上有一个WCF服务在内部网络中运行良好。在外部,我可以看到目录浏览,因为在web.config中启用了,但是一旦我点击svc文件就会抛出404"服务器错误在' /'应用&#34 ;.还有一个DMZ反向代理,我相信这是我的问题。我检查了IIS-7日志,并且没有记录404错误,只记录内部访问200 OK。 IIS有很多服务和站点在运行,但这是我公司第一次使用REST服务尝试WCF。几天来,我一直在寻找答案,只找到不适用于我的项目的解决方案。下面是我的配置文件。提前感谢您的帮助。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.net>
<defaultProxy useDefaultCredentials="true"></defaultProxy>
</system.net>
<system.diagnostics>
<sources>
<source propagateActivity="true" name="System.ServiceModel" switchValue="Warning,ActivityTracing">
<listeners>
<add type="System.Diagnostics.DefaultTraceListener" name="Default">
<filter type="" />
</add>
<add name="ServiceModelTraceListener">
<filter type="" />
</add>
</listeners>
</source>
</sources>
<sharedListeners>
<add initializeData="X:\RestService\DrillSvc\web_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
<filter type="" />
</add>
</sharedListeners>
</system.diagnostics>
<appSettings />
<connectionStrings>
<add name="cn" connectionString="Data Source =test ; initial catalog=Drillers; User Id=userid; Password=password" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364123" />
</assemblies>
</compilation>
<authentication mode="Windows" />
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
<identity impersonate="false" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<!--<remove name="webDAVModule"/>-->
</modules>
<directoryBrowse enabled="true" />
</system.webServer>
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="WCFwebBinding">
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="Windows"/>
</security>
</binding>
</webHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"> </serviceHostingEnvironment>
<services>
<service behaviorConfiguration="DrillServiceBehavior" name="DrillService">
<endpoint address="" behaviorConfiguration="WCFDrillWebBehavior" binding="webHttpBinding" contract="IDrillService">
<identity>
<dns value="mycompany.com" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="WCFDrillWebBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="DrillServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>`
更新:我添加了一个简单的HTML页面,它可以从外部公共工作,但svc文件仍然没有找到404错误。
答案 0 :(得分:1)
最后,在做了各种改变后,我发现了问题。在inetpub / wwwroot下的wcf服务的托管内部服务器中,有一个专门用于IIS站点而不是服务web.config的配置文件。添加此代码后,第一次尝试。 DMZ不需要改变。希望这会对其他人有所帮助。
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
答案 1 :(得分:0)
如果不了解环境,代理或者您正在测试服务的方式,很难肯定地说,但这里有几件事需要检查:
最后,如果您尝试通过HTTPS从外部浏览服务,则需要确保在配置中通过HTTPS公开服务元数据:
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
希望这有助于指明你正确的方向。