我们最近在产品环境中部署了WCF Web服务。尝试调用它甚至从浏览器访问WSDL都会返回401。此身份验证将在哪里进行?
此服务与其他十二个类似服务一起位于网站下的其自己的虚拟应用程序中。这些没有相同的症状。同样,这在三种预生产环境中都没有发生。
我已经查看了虚拟应用程序和应用程序池上的IIS设置,但是没有什么对我有利。我在UAT和Production配置之间看到的唯一差异是prod one目标4.6.1而不是4.6.2。
产品中的Web.config:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
<customErrors mode="Off" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding maxReceivedMessageSize="40000000">
</binding>
</basicHttpBinding>
<basicHttpsBinding>
<binding maxReceivedMessageSize="40000000">
</binding>
</basicHttpsBinding>
</bindings>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<directoryBrowse enabled="true" />
</system.webServer>
</configuration>
有人知道为什么这个站点会在未经授权的情况下将连接退回吗?即使只是浏览wsdl也是如此?
更新 在思考并检查here之后,我发现子状态代码为 返回值为3,表示对该文件夹具有权限。添加所有人(临时)可以解决此问题。仍然可以尝试跟踪为什么与其他所有应用程序池一样,使用相同的帐户来运行该应用程序池的虚拟应用程序与其他站点相同。
答案 0 :(得分:0)
我不知道您在部署/发布过程中如何配置。在我这边,我做了一个简单的演示,它正常运行。我希望您可以分享有关您的项目的更多详细信息。
服务器(配置)
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpsBinding>
<binding maxReceivedMessageSize="40000000">
</binding>
</basicHttpsBinding>
</bindings>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
服务器(接口/类)。
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
}
public class Service1 : IService1
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
}
我的服务器环境(10.157.13.70)是win10,IIS10。虚拟路径为C:\ Test。
这是我在IIS中所做的事情。
添加https绑定和开发证书。
此外,我在IIS身份验证模块中启用了“匿名身份验证”(默认设置)。
WCF功能。
结果。
随时让我知道问题是否仍然存在。