Исключение службы WCF как 401 на тестовом клиенте WCF и предоставленная схема URI 'http' недействительна;ожидаемый «https» во время вызова ASP.Net - PullRequest
0 голосов
/ 23 сентября 2019

При работе с сервисом WCF я столкнулся с некоторой проблемой и получил две разные ошибки. 1. При доступе к сервису через WCFTectClient я получаю несанкционированную ошибку.2. При доступе к сервису через приложение ASP.Net по ссылке на сервис я получаю сообщение «Предоставленная схема URI« http »недействительна; ожидается« https ».»

В моей среде разработки все работает отлично, однако послехостинг это выбрасывает ошибки.Я попытался сопоставить и изменить настройки конфигурации в web.config, но безрезультатно.

Ниже приведены мои web.configs 1. Сервис web.config

                <configuration>
              <system.web>
                <compilation debug="true" targetFramework="4.5" />
                <httpRuntime targetFramework="4.5" />
                <authentication mode="Windows" />
               <system.serviceModel>
                <client>
                  <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_SomeOtherClient" 
                  contract="SomeOtherClient_Contract}" name="BasicHttpBinding_SomeOtherClient" />
                  <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_SomeOtherClient1" contract=" 
               {SomeOtherClient_Contract1}" name="BasicHttpBinding_SomeOtherClient1" />
                </client>
                <bindings>
                  <basicHttpBinding>
                    <binding name="BasicHttpBinding_MyName">
                      <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Windows" />
                      </security>
                    </binding>
                    </basicHttpBinding>
                </bindings>
                <services>
                  <service behaviorConfiguration="MEX" name="{SERVICE_CONFIGURATION_NAME}">
                    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MyName" 
                    name="BasicHttpBinding_MyName" contract="MyService.Services.InterfaceName">
                      <identity>
                        <dns value="localhost" />
                      </identity>
                    </endpoint>
                    <endpoint address="mex" binding="mexHttpBinding" 
                contract="IMetadataExchange" />
                  </service>
                </services>
                <behaviors>
                  <serviceBehaviors>
                    <behavior name="MEX">
                      <serviceMetadata httpGetEnabled="true"  />
                      <serviceDebug includeExceptionDetailInFaults="true" />
                      <serviceCredentials>
                        <clientCertificate>
                          <authentication mapClientCertificateToWindowsAccount="true" 
                  />
                        </clientCertificate>
                      </serviceCredentials>
                    </behavior>
                  </serviceBehaviors>
                   </behaviors>
                   <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
                  multipleSiteBindingsEnabled="true" />
                  </system.serviceModel>
                   </configuration>

Приложение Web.Config

            <configuration>
              <system.web>
                <browserCaps userAgentCacheKeyLength="256" />
                <compilation debug="true" targetFramework="4.7.2" />
                <authentication mode="Windows" />
                <sessionState mode="InProc" timeout="20" />
                <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
                </pages>
                <customErrors mode="Off" defaultRedirect="~/Error.aspx">
                </customErrors>
                <webServices>
                  <protocols>
                    <add name="HttpGet" />
                    <add name="HttpPost" />
                  </protocols>
                </webServices>
              </system.web>
              <appSettings>
                 <add key="{WCF_SERVICE_URL}" value="http://ServerBaseURl/MyWCF_SERVICE_URL" />


              </appSettings>
              <system.serviceModel>
                <serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="1" />
                <behaviors>
                  <serviceBehaviors>
                    <behavior name="">
                      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
                      <serviceDebug includeExceptionDetailInFaults="true" />
                    </behavior>
                  </serviceBehaviors>
                </behaviors>
                <bindings>
                  <basicHttpBinding>
                    <binding openTimeout="01:50:00" receiveTimeout="01:50:00" sendTimeout="01:50:00" maxBufferPoolSize="20000000" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                      <readerQuotas maxDepth="128" maxStringContentLength="8388608" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                      <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Windows" />
                      </security>
                    </binding>

                      <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Windows" />
                      </security>
                    </binding>
                    <binding name="BasicHttpBinding_Windows" maxReceivedMessageSize="2147483647">
                      <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Windows" />
                      </security>
                    </binding>
                    <binding name="BasicHttpBinding_MyName" receiveTimeout="00:20:00" sendTimeout="00:20:00" maxReceivedMessageSize="2147483647">
                      <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Windows" />
                      </security>
                    </binding>


                  </basicHttpBinding>
                </bindings>

            <client>
                    <endpoint address="MyServiceURL"
                  binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MyName"
                   contract="yService.Services.InterfaceName"
                   name="BasicHttpBinding_MyName" />

                </client>
              </system.serviceModel>
              <devExpress>
                <settings rightToLeft="false" />
                <compression enableHtmlCompression="false" enableCallbackCompression="true" enableResourceCompression="true" enableResourceMerging="true" />
                <themes enableThemesAssembly="true" />
                <errors callbackErrorRedirectUrl="" />
              </devExpress>
            </configuration>    

Для WCF TestClient Ниже приведено исключение

Ошибка: невозможно получить метаданные из {MyServiceURL}, если этоСлужба Windows (R) Communication Foundation, к которой у вас есть доступ, убедитесь, что вы включили публикацию метаданных по указанному адресу.Для получения справки о включении публикации метаданных см. Документацию MSDN по адресу http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata URI ошибки Exchange: метаданные {MyServiceURL} содержат ссылку, которая не может быть разрешена: '{MyServiceURL}'.HTTP-запрос не авторизован с помощью схемы аутентификации клиента «Anonymous».Заголовок аутентификации, полученный от сервера, был 'Negotiate, NTLM'.Удаленный сервер возвратил ошибку: (401) Unauthorized.HTTP GET Error URI: {MyServiceURL} Произошла ошибка при загрузке «{MyServiceURL}».Сбой запроса с состоянием HTTP 401: не авторизован.

для приложения

Предоставленная схема URI 'http' недействительна;ожидаемый «https».Имя параметра: через описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.ServiceModel.FaultException`1 [[System.ServiceModel.ExceptionDetail, System.ServiceModel, Версия = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089]]: предоставленная схема URI 'http' является недействительным;ожидаемый «https».Имя параметра: через

Ошибка источника:

Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение.Информация о происхождении и местонахождении исключения может быть идентифицирована с помощью приведенной ниже трассировки стека исключений.

Трассировка стека:

[FaultException`1: предоставленная схема URI 'http' недействительна;ожидаемый «https».Имя параметра через

1 Ответ

0 голосов
/ 24 сентября 2019

В файле конфигурации служба создается привязкой Basichttpbinding в режиме безопасности TransportCredentialOnly.и требуемые учетные данные клиента - Windows.Первый пункт требует, чтобы мы указали базовый адрес Http в качестве базового адреса службы.Второй момент заключается в том, что мы должны указать учетные данные Windows (имя пользователя / пароль) при вызове службы.это не может быть достигнуто в Wcttestclient, за исключением того, что мы изменим clientCredentialType.

<transport clientCredentialType="None"></transport>

Что касается ошибок, выданных вашим клиентским приложением.Я предлагаю вам создать клиентский прокси-класс, повторно добавив ссылку на сервис.
Не стесняйтесь сообщить мне, если проблема все еще существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...