草庐IT

终结点

全部标签

c# - WCF 终结点 : Message. WriteMessage 更改 XML 消息内的结束标记

我使用自定义端点行为扩展来拦截消息,因为它们是由我的WCF服务端点接收的,使用IDispatchMessageInspector。我像这样检索消息内容:publicobjectAfterReceiveRequest(refMessagerequest,IClientChannelchannel,InstanceContextinstanceContext){MessageBuffermessageBuffer=request.CreateBufferedCopy(Int32.MaxValue);Messagemessage=messageBuffer.CreateMessage();u

windows - 终结器中的 WCF NullReferenceException

我们遇到了WCF的问题,花了我们很长时间来诊断,所以我将它们张贴在这里以防有人遇到类似的问题(在其他任何地方都找不到引用)。我们的流程经常会因以下未处理的异常而崩溃:System.NullReferenceException:Objectreferencenotsettoaninstanceofanobject.atSystem.ServiceModel.Channels.OverlappedContext.CompleteCallback(UInt32error,UInt32numBytes,NativeOverlapped*nativeOverlapped)atSystem.Run

c# - 在 WCF 服务中公开 webHttpBinding 终结点

我创建了一个WCF服务并公开了三个端点,它们是basicHttpBinding、wsHttpBinding和webHttpBinding。这是我使用WCF进行实验的测试服务。但是,每当我使用.svc文件添加服务引用时,我只会得到两个(基本和ws)端点。由于某种原因,似乎没有公开第三个(webHttpBidning)端点。要重现此问题,请创建一个WCF应用程序项目,删除Service1服务,添加名为TestService的新项目>WCF服务,并将配置文件更改为以下内容:这里是ITestService.cs的代码:[ServiceContract]publicinterfaceITestS

c# - 为什么 GC 会将对象放入终结队列?

据我所知,一旦我实现了类的析构函数,C#中的垃圾收集器就会将类的所有对象放入终结队列。当我阅读GC.Suppresfinalize的文档时,它提到对象header已经为调用finalize设置了位。我想知道为什么GC的实现者必须将所有对象放入队列中,并将内存释放延迟1-2个周期。难道他们释放内存的时候就看一下位标志,然后调用对象的finalize,然后释放内存吗?毫无疑问,我是个白痴,我无法理解GC的工作原理。我提出这个问题只是为了提高我的理解或填补我知识上的空白编辑:如果位标志用于suppressfinalize,GC实现者可以为此目的在对象header中添加另一个标志,不是吗?

c# - 垃圾收集和终结器 : Finer Points

在回答关于SO的另一个问题*以及随后的评论讨论时,我在一个我不清楚的地方碰壁了。在我误入歧途的任何地方纠正我......当垃圾收集器收集一个对象时,它会在一个单独的线程上调用该对象的终结器(除非终结器已被抑制,例如通过Dispose()方法)。在收集时,GC会挂起除触发收集的线程之外的所有线程(后台收集除外)。不清楚的地方:垃圾收集器是否在收集之前等待终结器在该对象上执行?如果不是,它会在终结器仍在执行时取消挂起线程吗?如果它等待,如果终结器遇到一个被挂起线程持有的锁,会发生什么情况?终结器线程是否死锁?(在我的回答中,我认为这是糟糕的设计,但我可能会看到可能发生这种情况的情况)*原始

c#终结器抛出异常?

引自MSDN:如果Finalize或Finalize的重写抛出异常,运行时将忽略该异常,终止该Finalize方法,并继续完成过程。但如果我有:~Person(){thrownewException("meh");}然后它会导致运行时异常?附注我知道这永远不应该发生,但是我只是对这种行为感到好奇。我们的一个客户在他们所有的终结器周围都有一个空的trycatch。它甚至没有在出现问题或恢复对象时记录:/ 最佳答案 链接引用的来源很重要。我不得不假设它谈论的是旧版本的.NET,也许是1.x版。它试图“容忍”未处理的异常,不吱声地吞下它们

c# - 应该在没有终结器的对象上调用 GC.SuppressFinalize 吗?

出于某种原因FXCopseemstothink我应该在Dispose中调用GC.SuppressFinalize,无论我是否有终结器。我错过了什么吗?是否有理由在没有定义终结器的对象上调用GC.SuppressFinalize? 最佳答案 没有必要在Dispose中调用GC.SuppressFinalize(this),除非:您是实现用于重写的虚拟Dispose方法的基类(同样,即使在这里,这也可能不是您的责任,但在那种情况下您可能想要这样做)你自己有一个终结器。从技术上讲,.NET中的每个类都有一个终结器,但如果唯一存在的终结器是

c# - 找不到终结点 - WCF Web 服务

我已经为我的WCF服务创建了2个端点。它在basicHttpBinding上工作正常,但在webHttpBinding上会导致错误。错误=未找到端点。操作合约定义[OperationContract][WebInvoke(Method="POST",BodyStyle=WebMessageBodyStyle.WrappedRequest,ResponseFormat=WebMessageFormat.Json)]VINDescriptionCallADSWebMethod(stringvin,stringstyleID);web.config:请建议我如何解决这个问题?

c# - 具有终结器但不是 IDisposable 的单例

这是我从“CLRviaC#”、“EffectiveC#”和其他资源中对IDisposable和终结器的理解:IDisposable用于确定性地清理托管和非托管资源。负责非托管资源(例如文件句柄)的类应实现IDisposable并提供终结器以保证即使客户端代码未在实例上调用Dispose()也能清理它们。只负责托管资源的类不应该实现终结器。如果您有终结器,则必须实现IDisposable(这允许客户端代码做正确的事情并调用Dispose(),而终结器可防止在忘记时泄漏资源)。虽然我理解并同意上述所有内容的原因,但在一种情况下我认为打破这些规则是有意义的:负责非托管资源的单例类(例如提供单

【Spring6源码・IOC】Bean的初始化 - 终结篇

前面两篇,我们着重讲解了一下《BeanDefinition的加载》和《bean的实例化》。这一篇我们来讲解一下bean的初始化。我们这里的案例依旧是以SpringBoot3.0、JDK17为前提,案例代码如下:@ComponentpublicclassA{@AutowiredprivateBb;}@ComponentpublicclassB{@AutowiredprivateAa;}首先,先明确一下这个三级缓存:一级缓存singletonObjects中存放完全初始化好的bean的实例。二级缓存earlySingletonObjects中存放早期对象(未完全初始化完成的bean实例)。三级缓存