上下文
我使用生成的客户端从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客户端? (或者我错过了什么......?)
如果是,那么解决方法是什么?我们是否必须重新实现所有消息呈现和解析?
答案 0 :(得分:1)
标准的服务参考&#39;您可以在visual studio中生成的(或旧的Web引用)不会在沙盒模式下工作。它使用Microsoft序列化程序(来自System.Runtime.Serialization),默认情况下,在沙箱中不支持任何未在GAC中注册的类。
据我所知,没有快速解决方法。该链接提供了两种可能的替代解决方案,但它们都不能直接与服务引用一起使用。
答案 1 :(得分:0)
您的WCF服务是否使用HTTPS托管?这对于CRM Online中的沙盒插件是必需的。也不能使用IP地址。您必须使用需要DNS名称解析的命名Web地址