我从未将WCF服务部署到IIS 6上。我有一个服务正在使用WCF项目的默认配置部署到IIS 6上。我之后简化了配置,以为那可能是问题所在。如果我在浏览器中浏览该服务,则会出现以下错误:
如果我尝试将它作为一个引用添加到ASP.NET MVC中,我会得到以下错误信息:
“下载 'http://ws.mycompany.com/MyService.svc' 时发生错误。请求失败,HTTP状态为403:禁止访问。元数据包含无法解析的引用:'http://ws.mycompany.com/MyService.svc'。HTTP请求被禁止,客户端身份验证方案为“匿名”。远程服务器返回错误:(403)禁止访问。如果服务在当前解决方案中定义,请尝试构建解决方案并重新添加服务引用。”
有什么想法是怎么回事吗?
更新:
似乎是我的IIS 6配置问题。我这样假设,因为我创建了一个全新的ASP.NET 3.5 WCF应用程序,并将其部署到http://ws.unitedoneresources.com/Service1.svc的新URL上。如果我尝试调用该服务,则会出现与上述相同的HTTP错误。整个服务配置如下:
HTTP Error 403.1 - Forbidden: Execute access is denied.
我的配置现在看起来像这样:
<system.serviceModel>
<services>
<service name="MyCompany.WebServices.MyService">
<endpoint address="" binding="basicHttpBinding" contract="MyCompany.WebServices.IMyService" />
</service>
</services>
</system.serviceModel>
如果我尝试将它作为一个引用添加到ASP.NET MVC中,我会得到以下错误信息:
“下载 'http://ws.mycompany.com/MyService.svc' 时发生错误。请求失败,HTTP状态为403:禁止访问。元数据包含无法解析的引用:'http://ws.mycompany.com/MyService.svc'。HTTP请求被禁止,客户端身份验证方案为“匿名”。远程服务器返回错误:(403)禁止访问。如果服务在当前解决方案中定义,请尝试构建解决方案并重新添加服务引用。”
有什么想法是怎么回事吗?
更新:
似乎是我的IIS 6配置问题。我这样假设,因为我创建了一个全新的ASP.NET 3.5 WCF应用程序,并将其部署到http://ws.unitedoneresources.com/Service1.svc的新URL上。如果我尝试调用该服务,则会出现与上述相同的HTTP错误。整个服务配置如下:
<system.serviceModel>
<services>
<service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
<!-- Service Endpoints -->
<endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1">
<!--
Upon deployment, the following identity element should be removed or replaced to reflect the
identity under which the deployed service runs. If removed, WCF will infer an appropriate identity
automatically.
-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfService1.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="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>
</system.serviceModel>
再次强调,这是一个全新的ASP.NET 3.5 WCF应用程序,因此我没有修改任何项目本身的内容。