DevForce - 继承时发生IKnownType问题

时间:2016-09-16 09:46:41

标签: c# inheritance devforce

Devforce 7.4.0.0。

我们有一个在服务器和客户端之间共享的DLL。目标是创建一个服务器方法,它将返回一些自定义(可序列化)对象的列表。

所以我在共享DLL中声明了这一点,没有创建服务器方法或更改任何其他方法,只是启动了项目。它崩溃了。然后我稍微更改了这段代码,它再次起作用。

我有一个带有" IKnownType"的接口的相同模式。和应用程序中另一个地方的一些子类,我没有这些问题。看起来它可能发生也可能不发生,这取决于命名空间或我无法发现的东西。

但是,这不是我第一次遇到DevForce继承问题。我在前一次提到的另一个案例中发现,如果你的继承深度高于两个级别(即基本类型' A'它是" IKnownType" - > B (衍生自A) - > C(衍生自B)),然后我遇到了同样的问题。最糟糕的是,您从DevForce获得的消息并未提示您类型存在问题。

服务器/客户端DevForce日志中没有提到类型错误的内容。这两个都显示为IdeaBlade.EntityModel.KnownTypeHelper +<> c:b__5_1

我还尝试了一种基于IKnownTypeProvider的替代方法,这次应用程序启动了,但是当我调用使用这些类型的服务器方法时它就崩溃了。

非工作代码,编译,启动,崩溃(请参阅下面的堆栈跟踪):

    public interface IMyProjection : IKnownType {
        long Id {
            get;set;
        }
    }

    public class MyProjection : IMyProjection {
        public long Id {
            get; set;
        }

        public string Name {
            get; set;
        }

        public bool IsLocked {
            get;set;
        }
    }

工作代码,没有继承,编译,运行..:

public class MyProjection : IKnownType {
        public long Id {
            get; set;
        }

        public string Name {
            get; set;
        }

        public bool IsLocked {
            get;set;
        }
    }

服务器堆栈跟踪:

   at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at IdeaBlade.EntityModel.IEntityServerContract.Login(ILoginCredential credential)
   at IdeaBlade.EntityModel.RemoteEntityServerProxy.<>c__DisplayClass3_0.<Login>b__0()
   at IdeaBlade.EntityModel.WCF.RetryStrategy.ExecuteAction[TResult](Func`1 func)
   at IdeaBlade.EntityModel.RemoteEntityServerProxy.ExecuteOnServer[T](Func`1 function, IRetryPolicy policy)

0 个答案:

没有答案