Я пытаюсь настроить приложение 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>