Информация о приложении к сервису wcf - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь настроить приложение winforms для вызова службы wcf. Поскольку ошибка возникает в службе wcf, размещенной в Azure, я надеюсь, что понимание приложений может помочь мне.

      These are the steps I followed
        An official link from Microsoft on how to add Application Insights to a Windows Forms application. From the link:

        In Azure - portal.azure.com

        Create an Application Resource. ::New / Developer Services / Application Insights.
        Notice the instrumentation key generated, grab a copy and set it aside, we'll need it when we configure your application.
        In Your Application

        NuGet - Add 'Application Insights API'

    <ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">
        <TelemetryChannel>
            <DeveloperMode>false</DeveloperMode>
        </TelemetryChannel>
        <TelemetryModules>
            <Add Type="Microsoft.ApplicationInsights.Tracing.DiagnosticsTelemetryModule, Microsoft.ApplicationInsights"/>
        </TelemetryModules>
        <InstrumentationKey>**

your-instrumentation-key-guid**</InstrumentationKey>
</ApplicationInsights>

Я думаю, вот где я потерялся. Служба вызывается из приложения winforms. Конечная точка службы WCF находится в файле app.config клиента winforms. Как эта конечная точка знает, как использовать понимание приложения? Мне тоже нужен https?

Рабочий журнал для AfterReceiveRequest 1df55aaa-0208-4a6f-820b-fb7efc12484d 2019-03-13T14: 54: 53.344Z 2019-03-13T14: 59: 53.344Z пользователь пароль https://workingVMerver/Services/2019/Image.svc http://test.com/ws/DocImgSrch

Неработающий журнал:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
  <s:Header>
    <ActivityId CorrelationId="8047fce6-2567-4cbb-b3d9-a0ece3e9199c" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">d9377396-bdd0-48d7-b9a5-d1b6e2ff8a85</ActivityId>
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <u:Timestamp u:Id="_0">
        <u:Created>2019-03-13T13:54:47.899Z</u:Created>
        <u:Expires>2019-03-13T13:59:47.899Z</u:Expires>
      </u:Timestamp>
      <o:UsernameToken u:Id="uuid-f0319ed1-aac2-4768-9d1c-e1dec7598bf1-1">
        <o:Username>userr</o:Username>
        <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</o:Password>
      </o:UsernameToken>
    </o:Security>
    <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://nonworkingvmv1/Services/2019/Image.svc</To>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://jackhenry.com/ws/DocImgSrch</Action>
</s:Header>

Оба являются запросами https, но в нерабочем состоянии SSL не распознается, и заголовок выдает ошибку

   <binding name="httpsCertificateBinding" closeTimeout="01:01:00"
          openTimeout="01:01:00" receiveTimeout="01:10:00" sendTimeout="01:01:00"
          allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="2147483646" maxBufferPoolSize="2147483646" maxReceivedMessageSize="2147483646">
              <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"
                maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
           <security mode="TransportWithMessageCredential">
             <message clientCredentialType="UserName"/>
             <transport clientCredentialType="None"></transport>
           </security>
        </binding>

    <service behaviorConfiguration="DefaultBehavior" name="Services.Image">    
         <endpoint address="" binding="basicHttpBinding" bindingConfiguration="httpCertificateBinding" name="BasicHttpEndPoint" contract="Services.Interfaces.IImage" />

            <endpoint address="" binding="basicHttpBinding" bindingConfiguration="httpsCertificateBinding"  bindingNamespace="http://jackhenry.com/jxchange/TPG/2008" contract="Services.Interfaces.IImage" />

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

 <serviceBehaviors>
        <behavior name="DefaultBehavior">
         <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
  <serviceDebug includeExceptionDetailInFaults="true" />
      <PfRequestOutputBehaviorExtensionElement/>
         <serviceCredentials>
             <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Services.CustomMembershipProvider,Services"/>
          </serviceCredentials>
         <useRequestHeadersForMetadataAddress />

         </behavior>

Это то же поведение ... но ssl не работает на неисправном. Валидатор не вызывается. И служба выдает ошибку, которая не может понять mustunderstand = 1

Единственная разница в запросе заключается в следующем В неисправном. Несмотря на то, что я звоню https, URL-адрес здесь принимает http http://nonworkingVm/Services/2019/Image.svc

В рабочем один его https https://workingvm/Services/2019/Image.svc

SSL обрабатывается на уровне шлюза. Шлюз приложений Azure перенаправляет http-запрос на https. Все, что я делаю, это настраиваю конфигурацию WCF на ВМ, чтобы указывать привязки https. Я не "требую ssl" на IIS. URl для неработающего - https, а WSDl - http. Я не знаю, почему он сказал бы это даже после настройки всех привязок. Я никогда не работал с лазурью.

Я также попробовал ValidateMustUnderstand = false. Это делает исключение, что

 Security processor was unable to find a security header in the message. 
This might be because the message is an unsecured fault or because there is a binding mismatch between the communicating parties.  
This can occur if the service is configured for security and the client is not using security

Ответ с отключенной настройкой проверки выглядит следующим образом. Очевидно, что нет действия должны понимать заголовок

<s:Header>
<ActivityId CorrelationId="d2fbd200-01e1-4657-b35a-b583be38341a" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">00000000-0000-0000-0000-000000000000</ActivityId>
</s:Header>
...