从CRM沙盒插件调用WCF(使用生成的客户端)会抛出System.Security.SecurityException

时间:2016-07-07 06:11:28

标签: c# .net wcf dynamics-crm dynamics-crm-online

上下文

我使用生成的客户端从CRM插件调用WCF服务。 (System.ServiceModel.ClientBase<T>)CRM插件必须在沙箱隔离模式下工作。 WCF客户端是从纯wsdl和xsd&#39;生成的。它似乎正在使用Xml序列化,因此不涉及任何反射。

插件执行抛出:

  

System.Security.SecurityException:请求类型为&#39; System.Security.Permissions.SecurityPermission的权限,

在堆栈跟踪中,它似乎来自WCF客户端实现的核心:

  

服务器堆栈跟踪:   在System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime操作,ProxyRpc&amp; rpc)   在System.ServiceModel.Channels.ServiceChannel.Call(String action,Boolean oneway,ProxyOperationRuntime operation,Object [] ins,Object [] outs,TimeSpan timeout)   在System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall,ProxyOperationRuntime操作)   在System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

     

在[0]处重新抛出异常:   在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)   在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp; msgData,Int32 type)   在Microsoft.Crm.Sandbox.ISandboxHost.ExecuteCustomWorkflowActivityAndReturnTraceInfo(SandboxCallInfo callInfo,SandboxCustomActivityExecutionContext requestContext,Guid pluginAssemblyId,Int32 sourceHash,String assemblyName,Guid pluginTypeId,String pluginTypeName,String assemblyContents,Boolean returnTraceInfo)   在Microsoft.Crm.Sandbox.SandboxCustomActivity.Execute(SandboxClient客户端,SandboxCallTracker callTracker,IExecutionContext requestContext,String assemblyContents,Boolean returnTraceInfo)   在Microsoft.Crm.Sandbox.SandboxCodeUnit.Execute(IExecutionContext context)

问题

声明是否正确我们无法在沙盒隔离模式和CRM Online中使用WCF客户端? (或者我错过了什么......?)

如果是,那么解决方法是什么?我们是否必须重新实现所有消息呈现和解析?

2 个答案:

答案 0 :(得分:1)

标准的服务参考&#39;您可以在visual studio中生成的(或旧的Web引用)不会在沙盒模式下工作。它使用Microsoft序列化程序(来自System.Runtime.Serialization),默认情况下,在沙箱中不支持任何未在GAC中注册的类。

http://www.instantquick.com/index.php/serialization-in-sandbox-solutions?c=elumenotion-blog-archive/random-whatnot

据我所知,没有快速解决方法。该链接提供了两种可能的替代解决方案,但它们都不能直接与服务引用一起使用。

答案 1 :(得分:0)

您的WCF服务是否使用HTTPS托管?这对于CRM Online中的沙盒插件是必需的。也不能使用IP地址。您必须使用需要DNS名称解析的命名Web地址