Устранение неполадок Azure HTTP 500: проверка пользователя в поставщике memberhsip не вызывается - PullRequest
0 голосов
/ 11 марта 2019

В журнале Azure возникает следующая ошибка при попытке отправить запрос в службу WCF

В рабочем случае вызывается валидированный пользователь membershipprovider, затем вызывается AfterReceiveRequest и, наконец, вызывается веб-служба.

Но в нерабочем случае validateuser не вызывается. Он напрямую переходит к AfterReceiveRequest, а затем веб-служба выдает исключение, что он не может понять заголовок.

Шлюз приложений Azure направляет запрос в ВМ. Как-то выглядит заголовок или членство провайдера не распознается. Управление SSL осуществляется на уровне шлюза.

<behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">

          <serviceMetadata  httpGetEnabled ="true" httpsGetEnabled ="true"  />
          <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
          <serviceCredentials>
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="IDServices.CustomMembershipProvider,IDServices"/>
          </serviceCredentials>
          <useRequestHeadersForMetadataAddress />

        </behavior>

        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="endbehavior1">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </endpointBehaviors>
    </behaviors>


  { "timeStamp": "2019-03-11T16:18:29+00:00",
     "resourceId": "/SUBSCRIPTIONS/245CA15E-8C11-4F4C-B6D7-9F3E8EC5943F/RESOURCEGROUPS/JXCHANGERG/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/JHAAPPGW",
     "operationName": "ApplicationGatewayAccess", "category": "ApplicationGatewayAccessLog", "properties":
     {"instanceId":"appgw_0","clientIP":"009.04.06.009","clientPort":"65374","httpMethod":"POST","requestUri":"/PImage.svc","requestQuery":"",
     "userAgent":"Apache-HttpClient/4.1.1 (java 1.5)","httpStatus":"500","httpVersion":"HTTP/1.1","receivedBytes":"2638","sentBytes":"917","timeTaken":"0.018","sslEnabled":"on",
     "sslCipher":"ECDHE-RSA-AES256-GCM-SHA384","sslProtocol":"TLSv1.2","serverRouted":"40.124.51.221:80","serverStatus":"500","serverResponseLatency":"0.016","host":"jt.inaresecure.com"}, 
    "time": "2019-03-11T16:18:29.0000000Z"}

Может кто-нибудь помочь мне в чем может быть проблема. Запрос не выполняется на сервере? Все, что я получаю, это ошибка заголовка безопасности. Код работает на любой другой машине и сервере, кроме этой виртуальной машины на Azure. Запрос использует шлюз приложения для маршрутизации на виртуальную машину, где размещена служба WCF по SSL

.
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <s:Fault>
         <faultcode>s:MustUnderstand</faultcode>
         <faultstring xml:lang="en-US">The header 'Security' from the namespace 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' was not understood by the recipient of this message, causing the message to not be processed.  This error typically indicates that the sender of this message has enabled a communication protocol that the receiver cannot process.  Please ensure that the configuration of the client's binding is consistent with the service's binding.</faultstring>
      </s:Fault>
   </s:Body>
</s:Envelope>

Это журнал IIS для одного и того же вызова, вероятно, в другое время из-за моего запроса

Запрос настроен на использование SSL. Почему в журнале 80? Разве это не делает запрос SSL? Это запрос от SOAP UI

2019-03-11 17:27:44 10.0.0.4 POST /PCServices/2019/MySerivce.svc - 80 - 20.45.4.43 Apache-HttpClient/4.1.1+(java+1.5) - 500 0 0 1468

1 Ответ

0 голосов
/ 12 марта 2019

это может быть ошибка по причине запроса HTTPесли вы звоните с и на HTTPS, тогда аутентификация выполняется автоматически.но вы должны принудительно аутентифицироваться в HTTP-запросе.

if (HttpContext.Current.Request.Url.Scheme.ToUpper().Equals("HTTP"))
{
    CustomMembershipProvider auth = new CustomMembershipProvider();
    auth.Validate(Username,Pswd);
}
...