【问题标题】:Exception calling Silverlight enabled WCF service when using other assemblies使用其他程序集时调用启用 Silverlight 的 WCF 服务的异常
【发布时间】:2023-03-23 17:35:02
【问题描述】:

一般说明

我正在从 Silverlight 应用程序调用启用 Silverlight 的 WCF 服务。我的服务查询数据库(SQL Server)并从那里返回值。问题是该服务使用了其他库来执行脏数据库工作,并且在尝试使用该服务时出现此异常:

例外

System.ServiceModel.CommunicationException was unhandled by user code   Message="An error occurred while trying to make a request to URI 'mysite/myservice.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."   StackTrace:
       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 ODP_Silverlight.ODP.WCFServices.PropertySetWcfServiceClient.PropertySetWcfServiceClientChannel.EndGetPropertySet(IAsyncResult result)
       at ODP_Silverlight.ODP.WCFServices.PropertySetWcfServiceClient.ODP_Silverlight.ODP.WCFServices.PropertySetWcfService.EndGetPropertySet(IAsyncResult result)
       at ODP_Silverlight.ODP.WCFServices.PropertySetWcfServiceClient.OnEndGetPropertySet(IAsyncResult result)
       at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)   InnerException: System.Security.SecurityException
       Message=""
       StackTrace:
            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)
       InnerException: System.Security.SecurityException
            Message="Security error."
            StackTrace:
                 at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
                 at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
                 at System.Net.Browser.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)
            InnerException:

更多信息

如果我从using 语句中删除“using mylibs”,而只返回一些带有几个数字的简单列表,那么服务就可以正常工作。

有什么见解吗?

【问题讨论】:

  • mylibs 是做什么的?它坐在哪里?它如何访问数据?

标签: wcf silverlight exception


【解决方案1】:

使用 mylibs 不会调用任何代码。只有 mylibs 中的代码可以做到这一点。它似乎失败了。你应该测试一下。

请注意,由于此服务是在服务器上运行的(而不是在具有 SilverLight 的浏览器上),因此问题不可能是 SilverLight 权限。

【讨论】:

  • 其实是这样,但是即使我注释掉使用它的代码并保留 using 语句也会出现问题。当我复制错误以在此处复制粘贴异常时就是这种情况。我找到了解决此问题的方法,但这不是我的首选。如果我将 mylib.dll 添加到机器的完全受信任的程序集中,那么它可以工作,但我想避免这种解决方案。不想让程序的安装程序不得不这样做。您可能是对的,问题出在服务权限上,因为它无法访问 mylib.dll,除非它完全受信任。还有什么想法吗?
  • 废话。 using 语句根本不做任何事情。您是否还删除了对 DLL 的引用?您是否可能对 DLL 中的某个类型有一些引用但没有实例化它?这可能会触发静态构造函数。但是 using 声明所做的只是提供一个缩写。 “用一个;”表示您可以将“A.B”简称为“B”。
  • 嗯,对 mylib.dll 的引用从一开始就存在于项目中。即使你把使用放在一边(我可能错了),当我尝试从引用的 DLL 调用方法和东西时它仍然不起作用,但如果我不这样做,它仍然有效。就像我说的,如果我使用“caspol -machine -af mylib.dll”将 dll 添加到机器级别的“完全受信任的程序集”列表中,它确实适用于参考 dll。
【解决方案2】:

您是否在 WCF 服务上实现了 ClientAccessPolicy.xml 和 CrossDomain.xml?与您收到的类似的 CommunicationException 可能是由缺少 ClientAccessPolicy.xml 文件或不允许您的 Silverlight 客户端访问服务引起的。

【讨论】:

  • 你好 DaveB,我有一个 ClientAccessPolicy.xml 文件。我什至知道它正在工作,因为如果我删除它,即使返回一个简单的 List 也不起作用,因为该服务不可访问。我的问题只有在我使用其他库时才开始(C# - VS2008 中相同解决方案中的其他项目)。如果我将所有逻辑保留在托管服务的项目中,那么它可以工作,但我不想这样做。我已经有一个 dll 来完成所有的数据库工作,并且想重用它。还有其他想法吗?谢谢...
  • 您是否使用 WcfTestClient 测试过服务?那里也有例外吗?您可以在浏览器中查看 .svc 文件吗?您可以单击 WSDL 链接并确认它有效吗?我现在正在做一个与你描述的结构相同的项目。设置从服务实现项目到数据访问项目的引用,您应该不会收到此错误。所有的数据访问都是本地的吗?您可以从数据访问层获得任何 Web 服务吗?
猜你喜欢
  • 1970-01-01
  • 2011-03-20
  • 2011-10-13
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
相关资源
最近更新 更多