Silverlight 3 с сервисом WCF - - PullRequest
       0

Silverlight 3 с сервисом WCF -

0 голосов
/ 10 июня 2010

У меня есть приложение 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, и никто не смог найти решение для меня.Помоги мне, Оби-Ван-Кеноби.

Ответы [ 2 ]

0 голосов
/ 30 июля 2010

Вы представили свой сервис как Ws Binding, который Silverlight не поддерживает.Если вы используете те же настройки безопасности с basicHttpBinding, он должен работать, однако.

0 голосов
/ 11 июня 2010

Я думаю, что проблема может быть связана с clientCredentialType на вашей стороне сервера. E.g.:

<security mode="Transport">
     <transport clientCredentialType="Certificate" />
</security>

Я не думаю, что Silverlight поддерживает такие учетные данные клиента на транспортном уровне.

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