Сброс соединения при обращении к службе WCF, размещенной в IIS 7.5 - PullRequest
1 голос
/ 10 февраля 2012

Я пытаюсь создать фиктивную службу маркеров безопасности, используя шаблон веб-сайта службы токенов безопасности WCF.При создании веб-сайта, если я указываю URI файловой системы и размещаю сайт на веб-сервере разработки ASP.NET, все выглядит нормально.Однако я хочу, чтобы служба STS использовала SSL, и я также хотел бы избежать междоменных проблем, возникающих при использовании динамических портов, назначаемых веб-сервером разработки ASP.NET.Поэтому я заново создал тот же веб-сайт, но указал URI HTTPS для предварительно настроенного веб-приложения в IIS 7.5 (например, https://localhost/SecurityTokenService/) вместо URI файловой системы. Теперь все попытки перейти к файлу Service.svc приводят к принудительному соединениюreset.

Ниже приведен мой файл web.config, хотя тот факт, что он работает при размещении на веб-сервере разработки ASP.NET, заставляет меня думать, что проблема связана с настройкой 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>

ОБНОВЛЕНИЕ: я могу переходить к другим файлам в веб-приложении. Только не к файлу * .svc. Мне не с чем работать, кроме 101 statucкод, так что это расстраивает.

ОБНОВЛЕНИЕ: Дальнейшие эксперименты показывают, что проблема существует только со службами WCF, которые являются STS и размещены в IIS. Если я размещаю обычную службу WCF в IIS, проблем нет.скачал множество примеров проектов, содержащих пользовательские STS, и все они демонстрируют одинаковое поведение.Полагаю, что с настройкой моего IIS что-то не так, что мешает ему хорошо играть с STS.Бьет меня, как я могу понять, в чем проблема ...

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Я открыл в Microsoft поддержку по этому поводу.После анализа большого количества файлов журналов и трассировки мы определили, что физический путь к виртуальному каталогу в IIS был неправильным.Это странно, потому что Visual Studio создал виртуальный каталог от моего имени, когда я добавил проект в свое решение.Я удалил и заново создал виртуальный каталог, и все стало работать.

0 голосов
/ 11 февраля 2012

Базовый адрес в вашем сервисе настроен на HTTP, а не HTTPS. Кроме того, если вы просматриваете его с помощью HTTPS и ожидаете увидеть определение сервиса, я думаю, вам нужен httpsGetEnabled, а не httpGetEnabled. Может ли это быть проблемой?

...