之前我从未向IIS 6部署过WCF服务。我通过使用默认配置作为WCF项目的一部分,获得了我正在部署到IIS 6的服务。我从那以后简化了可能成为问题的配置思路。如果我在浏览器中浏览该服务,则会出现以下错误:
HTTP错误403.1 - 禁止:执行 访问被拒绝。
我的配置现在看起来像这样:
<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应用程序,因此我没有对项目本身进行任何修改。
答案 0 :(得分:2)
我搞砸了我搞砸了网站,在IIS 6上安装了WCF(在命令提示符下使用ServiceModelReg.exe / i / x),然后重新部署。它奏效了!
谢谢!
答案 1 :(得分:1)
找到这个问题,寻找同一问题的解决方案。我忘了更改服务目录中“脚本和可执行文件”的权限。我在II7上
答案 2 :(得分:0)
你真的没有给我们很多东西 - 缺少的是服务器端配置位,告诉我们你如何设置安全性 - 请你更新你的问题并告诉我们一切在服务器端配置的<system.serviceModel>
标签内以及调用服务器的客户端上?
从系统默认值中猜测,使用basicHttpBinding
会导致默认安全设置为空 - 并且看起来好像您的服务器端配置需要某种形式的安全性。几乎看起来您的安全设置不同步,从而导致此错误。
另一点是:你是如何设置IIS端的?您是否为服务创建了虚拟目录?基本上,在IIS中托管时,您的服务URL由服务器名称(可能还有端口),* .svc文件所在的虚拟目录以及svc文件本身的名称和扩展名确定。
答案 3 :(得分:0)
我们有类似的症状,但只有IIS 6.0下的PUT和DELETE谓词。
默认情况下,IIS应用程序中的.svc扩展名只允许使用GET,POST谓词。
为应用程序添加.svc扩展名的动词(或允许所有动词)修复了该问题。