Вопрос

Я запускаю простой сервис на своем сервере с помощью WCF;служба размещена в WebDev.WebServer.exe (локальном).

Когда я вызываю локальную Службу, я получаю следующее исключение:

Необработанное исключение:Система.Модель обслуживания.Безопасность.Исключение SecurityNegotiationException:Защищенный канал не может быть открыт из-за сбоя согласования безопасности с удаленной конечной точкой.Это может быть связано с отсутствием или неправильно указанным EndpointIdentity в EndpointAddress, используемом для создания канала.Пожалуйста, убедитесь, что EndpointIdentity, указанный или подразумеваемый EndpointAddress, правильно идентифицирует удаленную конечную точку.---> System.ServiceModel.Исключение FaultException:Сообщение с действием 'http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue' не может быть обработан получателем из-за несоответствия ContractFilter в EndpointDispatcher.Это может быть вызвано либо несоответствием контракта (несовпадающими действиями между отправителем и получателем), либо несоответствием привязки / безопасности между отправителем и получателем.Убедитесь, что отправитель и получатель имеют один и тот же контракт и одинаковую привязку (включая требования безопасности, напримерСообщение, Транспорт, Отсутствует).

Вот мои два файла app.config с клиента и сервера.Я создал app.config из клиента с помощью svcutil-Tool, так что все должно быть правильно:

Клиент

<client>
    <endpoint address="http://localhost:1634/UsuarioContexto.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IUsuarioContexto"

        contract="CarWin.ServiceContracts.Interfaces.IUsuarioContexto" name="LOCAL_WSHttpBinding_IUsuarioContexto">

        <identity><dns value="localhost" /></identity>

    </endpoint>

</client>

<binding name="WSHttpBinding_IUsuarioContexto" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">

    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />

    <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />

    <security mode="Message">

        <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />

        <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true" />

    </security>

</binding>

Сервер

<services>
    <service behaviorConfiguration="UsuarioContextoBehavior" name="UserContext.Host.UsuarioContexto">

        <endpoint address="" binding="wsHttpBinding" bindingNamespace="http://CarWin" bindingConfiguration="wsHttpBinding_IUsuarioContexto"

                  contract="CarWin.ServiceContracts.Interfaces.IUsuarioContexto">

            <identity>

                <dns value="localhost" />

            </identity>

        </endpoint>

        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

    </service>

</services>


<bindings>

    <wsHttpBinding>

        <binding name="wsHttpBinding_IUsuarioContexto" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">

            <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" />

            <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />

            <security mode="None">

                <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />

                <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true" />

            </security>

        </binding>

    </wsHttpBinding>

</bindings>

<behaviors>

    <serviceBehaviors>

        <behavior name="UsuarioContextoBehavior">

            <serviceMetadata httpGetEnabled="true" />

            <serviceDebug includeExceptionDetailInFaults="true" />

        </behavior>

    </serviceBehaviors>

</behaviors>
Это было полезно?

Решение

Проблема была в сервере, я поставил mode="Сообщение" и работает хорошо.Спасибо.

<security mode="None">  

<transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />  

<message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true" />  

</security> 

Другие советы

WCF очень мощный, но может стать кошмаром для конфигурации.Вот несколько потенциальных зацепок:

  • Включите журналы трассировки WCF, повторно запустите свой сценарий, а затем проверьте журналы с помощью SvcTraceViewer.exe
  • Выясните, как далеко заходит передача сообщений...
    • т. е.формирует ли клиент запрос и отправляет ли его серверу, который отклоняет его (т. е.на нижних уровнях WCF перед запуском вашего собственного сервисного кода);
    • или запрос останавливается на своем пути до этого..клиент даже не отправил запрос
  • http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue это сообщение, связанное с токеном WS-Trust, так что с аутентификацией что-то будет происходить
    • ошибка подразумевает несоответствие конфигурации, но при использовании SvcUtil они должны быть выровнены, как вы сказали
  • Клиентская привязка имеет сервер по адресу "http://localhost:1634/UsuarioContexto.svc"
    • Я не вижу этого порта, указанного в конфигурации сервиса...прослушивает ли служба этот порт?
    • если вы откроете браузер и наведете его на этот URL, получите ли вы служебную страницу по умолчанию?
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top