У меня есть приложение SL3, пытающееся подключиться к сервису WFC.И приложение, и служба находятся на разных защищенных серверах в одном домене.Приложение SL3 живет здесь:
https://www -r.aetc.af.mil / fm / tools / batsnet / аутентифицирован / модули / бла бла
КогдаПриложение SL запускается, оно немедленно подключается к службе, но когда оно делает первый вызов в службу, я получаю следующее исключение:
An exception occurred during the operation, making the result invalid. Check InnerException for exception details.
at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
at FMDashboard2.FMDashSvc3Ref.GetMetricDataCompletedEventArgs.get_Result()
at FMDashboard2.Objects.DataRetrieval.service_GetMetricDataCompleted(Object sender, GetMetricDataCompletedEventArgs e)
============
Inner exception: An error occurred while trying to make a request to URI 'https://bats.aetc.af.mil/fm/tools/FMDashSvc/FMDash3.svc'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. Please see the inner exception for more details.
at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
at FMDashboard2.FMDashSvc3Ref.FMDash3Client.FMDash3ClientChannel.EndGetMetricData(IAsyncResult result)
at FMDashboard2.FMDashSvc3Ref.FMDash3Client.FMDashboard2.FMDashSvc3Ref.FMDash3.EndGetMetricData(IAsyncResult result)
at FMDashboard2.FMDashSvc3Ref.FMDash3Client.OnEndGetMetricData(IAsyncResult result)
at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)
============
Inner exception:
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
============
Inner exception: Security error.
at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.c__DisplayClass5.b__4(Object sendState)
at System.Net.Browser.AsyncHelper.c__DisplayClass2.b__0(Object sendState)
Вот мой ClientConfig:
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="SecureBinding_FMDashSvc">
<binaryMessageEncoding />
<httpsTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
<binding name="LocalBinding_FMDashSvc">
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://bats.aetc.af.mil/fm/tools/FMDashSvc/FMDash3.svc"
binding="customBinding"
bindingConfiguration="SecureBinding_FMDashSvc"
contract="FMDashSvc3Ref.FMDash3"
name="SecureEndPoint_FMDashSvc_GDIT_BATS" />
<endpoint address="http://localhost:53519/FMDash3.svc"
binding="customBinding"
bindingConfiguration="LocalBinding_FMDashSvc"
contract="FMDashSvc3Ref.FMDash3"
name="LocalEndPoint_FMDashSvc" />
</client>
</system.serviceModel>
</configuration>
Вотмой веб-конфиг для сервиса:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="FMDashboardSvc3.StandardBehavior" >
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding >
<binding name="secureBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<services >
<service name="FMDashboardSvc3.FMDash3" behaviorConfiguration="FMDashboardSvc3.StandardBehavior">
<endpoint address="/"
binding="wsHttpBinding"
bindingConfiguration="secureBinding"
contract="FMDashboardSvc3.FMDash3" />
</service>
</services>
</system.serviceModel>
А вот мой файл ClientAccessPolicy.xml:
<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPAction">
<domain uri ="http://*" />
<domain uri ="https://*" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
<policy>
<allow-from https-request-headers="SOAPAction">
<domain uri ="http://*" />
<domain uri ="https://*" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
Я работал над этим для НЕДЕЛИ.Я забил и Codeproject, и форумы MSDN, и никто не смог найти решение для меня.Помоги мне, Оби-Ван-Кеноби.