我正在尝试使用WCF安全令牌服务网站模板创建虚拟安全令牌服务。在创建网站时,如果我指定文件系统URI并在ASP.NET Development Web Server中托管该站点,那么一切似乎都没问题。但是,我希望STS使用SSL,我还想避免使用ASP.NET Development Web Server分配的动态端口时出现的跨域问题。所以我重新创建了相同的网站,但为IIS 7.5中的预配置Web应用程序指定了HTTPS URI(例如https://localhost/SecurityTokenService/),而不是文件系统URI。现在,所有尝试导航到Service.svc文件都会导致强制连接重置。
下面是我的web.config文件,虽然它在ASP.NET开发Web服务器中托管时工作的事实让我觉得问题在于IIS设置。有什么事我可以试着找出发生了什么?
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections>
<section name="microsoft.identityModel" type="Microsoft.IdentityModel.Configuration.MicrosoftIdentityModelSection, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>
<appSettings>
<add key="IssuerName" value="ActiveSTS"/>
<add key="SigningCertificateName" value="CN=STSTestCert"/>
<add key="EncryptingCertificateName" value=""/>
</appSettings>
<connectionStrings />
<location path="FederationMetadata">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<authentication mode="None"/>
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</controls>
</pages>
</system.web>
<system.web.extensions>
<scripting>
<webServices>
</webServices>
</scripting>
</system.web.extensions>
<system.serviceModel>
<services>
<service name="Microsoft.IdentityModel.Protocols.WSTrust.WSTrustServiceContract" behaviorConfiguration="ServiceBehavior">
<endpoint address="https://localhost/SecurityTokenService/Service.svc/IWSTrust13" binding="ws2007HttpBinding" contract="Microsoft.IdentityModel.Protocols.WSTrust.IWSTrust13SyncContract" bindingConfiguration="ws2007HttpBindingConfiguration"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost/SecurityTokenService/Service.svc" />
</baseAddresses>
</host>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<ws2007HttpBinding>
<binding name="ws2007HttpBindingConfiguration">
<security mode="TransportWithMessageCredential">
<message establishSecurityContext="false" clientCredentialType="UserName" />
</security>
</binding>
</ws2007HttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<microsoft.identityModel>
<service>
<securityTokenHandlers>
<remove type="Microsoft.IdentityModel.Tokens.WindowsUserNameSecurityTokenHandler, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add type="CustomUserNamePasswordTokenHandler, App_Code"/>
</securityTokenHandlers>
</service>
</microsoft.identityModel>
</configuration>
更新:我可以导航到Web应用程序中的其他文件。只是不是* .svc文件。除了101 statuc代码之外,我没有任何工作要做,所以这很令人沮丧。
更新:进一步的实验表明该问题仅存在于STF的WCF服务并在IIS中托管。如果我在IIS中托管常规WCF服务则没有问题。我下载了包含自定义STS的各种示例项目,它们都表现出相同的行为。这让我相信我的IIS配置有问题,阻止它与STS玩得很好。打败我,我怎么弄清楚问题是什么......
答案 0 :(得分:0)
服务中的基地址配置为HTTP而不是HTTPS。此外,如果您使用HTTPS浏览它并期望看到服务定义,我认为您需要httpsGetEnabled而不是httpGetEnabled。这可能是问题吗?
答案 1 :(得分:0)
我向微软公开了一个支持案例。在深入研究了大量日志和跟踪文件后,我们确定IIS中虚拟目录的物理路径不正确。这很奇怪,因为当我将项目添加到我的解决方案时,Visual Studio代表我创建了虚拟目录。我手动删除并重新创建了虚拟目录,一切都开始工作了。