我有一个试图连接到WFC服务的SL3应用程序。应用程序和服务都位于同一域上的不同安全服务器上。 SL3应用程序住在这里:
https://www-r.aetc.af.mil/fm/tools/batsnet/authenticated/modules/blah blah
当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>
我一直在为WEEKS工作。我已经破解了Codeproject和MSDN论坛,没有人能够为我提供解决方案。帮助我,obi-wan-kenobi。
答案 0 :(得分:0)
我认为问题可能与服务器端的clientCredentialType有关。 E.g:
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
我认为Silverlight不支持传输级别的这种客户端凭证。
答案 1 :(得分:0)
您将服务公开为SilverW不支持的Ws Binding。如果你使用与basicHttpBinding相同的安全设置,它应该可以工作。