我试图实现在F#接口(WCF的名声)IDispatchMessageInspector
:通过参考令行禁止参数传递参数
open System.ServiceModel.Dispatcher
open System.ServiceModel.Channels
type ServiceInterceptor() as interceptor =
abstract member PreInvoke : byref<Message> -> obj
abstract member PostInvoke : byref<Message> -> obj -> unit
default x.PreInvoke m = null
default x.PostInvoke m s =()
interface IDispatchMessageInspector with
member x.AfterReceiveRequest(request, channel, instanceContext) = interceptor.PreInvoke(&request)
member x.BeforeSendReply(reply : byref<Message>, correlationState) = interceptor.PostInvoke &reply correlationState
这失败,出现以下错误编译:
但是,如果我将我的代码修改为以下内容(请注意PostInvoke
中的签名更改)一切正常:
open System.ServiceModel.Dispatcher
open System.ServiceModel.Channels
type ServiceInterceptor() as interceptor =
abstract member PreInvoke : byref<Message> -> obj
abstract member PostInvoke : byref<Message> * obj -> unit
default x.PreInvoke m = null
default x.PostInvoke (m, s) =()
interface IDispatchMessageInspector with
member x.AfterReceiveRequest(request, channel, instanceContext) = interceptor.PreInvoke(&request)
member x.BeforeSendReply(reply : byref<Message>, correlationState) = interceptor.PostInvoke(&reply, correlationState)
预计这种行为?如果是的话,有人可以解释它背后的原因......
不知道它会帮助;当试验时,我尝试使用'(ref arg)'而不是使用'&arg',并且我得到了这个错误:*错误FS0440:带有curried参数的方法不能声明(...)或'byref'参数*因此它可能是预期的行为;为什么现在我不知道。 – Sehnsucht