带有 WCF 服务的 Silverlight 3 -
Posted
技术标签:
【中文标题】带有 WCF 服务的 Silverlight 3 -【英文标题】:Silverlight 3 with WCF Service - 【发布时间】:2011-03-02 08:35:12 【问题描述】:我有一个 SL3 应用程序试图连接到 WFC 服务。应用程序和服务都位于同一域的不同安全服务器上。 SL3 应用程序就在这里:
https://www-r.aetc.af.mil/fm/tools/batsnet/authenticated/modules/blah废话
当 SL 应用程序启动时,它会立即连接到服务,但是当它第一次调用服务时,我得到了这个异常:
操作过程中发生异常,导致结果无效。检查 InnerException 以获取异常详细信息。 在 System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() 在 FMDashboard2.FMDashSvc3Ref.GetMetricDataCompletedEventArgs.get_Result() 在 FMDashboard2.Objects.DataRetrieval.service_GetMetricDataCompleted(对象发送者,GetMetricDataCompletedEventArgs e) ============= 内部异常:尝试向 URI 'https://bats.aetc.af.mil/fm/tools/FMDashSvc/FMDash3.svc' 发出请求时出错。这可能是由于在没有适当的跨域策略或不适合 SOAP 服务的策略的情况下尝试以跨域方式访问服务。您可能需要联系服务的所有者以发布跨域策略文件并确保它允许发送与 SOAP 相关的 HTTP 标头。此错误也可能是由于在 Web 服务代理中使用内部类型而不使用 InternalsVisibleToAttribute 属性造成的。有关更多详细信息,请参阅内部异常。 在 System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult 结果) 在 System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult 结果) 在 System.ServiceModel.Channels.ServiceChannel.EndCall(字符串操作,对象 [] 输出,IAsyncResult 结果) 在 System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult 结果) 在 FMDashboard2.FMDashSvc3Ref.FMDash3Client.FMDash3ClientChannel.EndGetMetricData(IAsyncResult 结果) 在 FMDashboard2.FMDashSvc3Ref.FMDash3Client.FMDashboard2.FMDashSvc3Ref.FMDash3.EndGetMetricData(IAsyncResult 结果) 在 FMDashboard2.FMDashSvc3Ref.FMDash3Client.OnEndGetMetricData(IAsyncResult 结果) 在 System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult 结果) ============= 内部异常: 在 System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,对象状态) 在 System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult 结果) ============= 内部异常:安全错误。 在 System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 在 System.Net.Browser.BrowserHttpWebRequest.c__DisplayClass5.b__4(对象 sendState) 在 System.Net.Browser.AsyncHelper.c__DisplayClass2.b__0(Object sendState)
这是我的客户端配置:
这是我的服务网络配置:
行为> 服务行为> 行为> 绑定> 安全> 绑定> 服务> 服务>
这是我的 ClientAccessPolicy.xml 文件:
政策> 政策> 跨域访问>
我已经为此工作了好几个星期。我已经敲过 Codeproject 和 MSDN 论坛,没有人能够为我想出一个解决方案。帮帮我,obi-wan-kenobi。
【问题讨论】:
您使用的是自签名证书还是实际证书? 我相信它们是真正的证书。这是一个空军域,他们使用 CAC 卡进行用户身份验证。 顺便说一句,我没有提到它,但是我可以直接浏览到该服务,但是通过 Silverlight 应用程序点击它会拒绝工作。 【参考方案1】:您将您的服务公开为 Silverlight 不支持的 Ws 绑定。但是,如果您使用与 basicHttpBinding 相同的安全设置,它应该可以工作。
【讨论】:
【参考方案2】:我认为问题可能与您服务器端的 clientCredentialType 有关。例如:
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
我认为 Silverlight 在传输级别不支持这种客户端凭据。
【讨论】:
好吧,如果我将其更改为任何其他凭据类型,我将无法直接浏览到该服务。以上是关于带有 WCF 服务的 Silverlight 3 -的主要内容,如果未能解决你的问题,请参考以下文章
使用 Silverlight 5、IIS 7.5 对 WCF 服务进行 Windows 身份验证
SilverLight、WCf 服务、Datetime.Today