我们最近在我们的prod环境中部署了一个WCF Web服务。尝试调用它甚至从浏览器访问WSDL都会返回401.此身份验证将在何处发生?
该服务位于拥有十几个其他类似服务的网站下的虚拟应用程序中。它们没有表现出相同的症状。同样,这不会发生在三个预制环境中的任何一个上。
我查看了虚拟应用程序和应用程序池中的IIS设置,但没有什么能让我感到惊讶。我在UAT和Production配置之间看到的唯一差异是产生目标4.6.1而不是4.6.2。
来自prod的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,表示该文件夹的权限。添加所有人(暂时)修复问题。这仍然会尝试跟踪与其他许多人在同一网站下的虚拟应用程序的原因,使用相同的帐户来运行应用程序池,因为所有其他应用程序池都遇到此问题。
我不知道您在部署/发布过程中如何配置。在我这边,我做了一个简单的演示,它正常工作。我希望你可以分享有关你的项目的更多细节。 服务器(配置)
<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功能。 结果。 如果问题仍然存在,请随时告诉我。