草庐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# - 为什么 WeakReference 在析构函数中没用?

考虑以下代码:classProgram{staticvoidMain(string[]args){Aa=newA();CreateB(a);GC.Collect();GC.WaitForPendingFinalizers();Console.WriteLine("Andhere's:"+a);GC.KeepAlive(a);}privatestaticvoidCreateB(Aa){Bb=newB(a);}}classA{}classB{privateWeakReferencea;publicB(Aa){this.a=newWeakReference(a);}~B(){Console.

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

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

c# - 关闭 WPF 应用程序时出现未处理的 NullReference 异常

当我关闭最后一个窗口时,我的应用程序中出现未处理的异常:Anunhandledexceptionoftype'System.NullReferenceException'occurredinPresentationFramework.dllAdditionalinformation:Objectreferencenotsettoaninstanceofanobject.只有在应用程序的生命周期中,我通过我设置的某个进程打开一个子窗口时才会发生这种情况。该窗口存在于另一个程序集中,该程序集在运行时使用MEF动态加载,然后使用CaSTLe进行实例化。如果我随后调用某个方法,它会创建一个新的

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

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

c# - C# 中的继承和析构函数

根据this,它声明析构函数不能被继承或重载。在我的例子中,对于所有子类,析构函数将是相同的。这几乎是在告诉我必须在每个子类中定义相同的析构函数吗?我无法在基类中声明析构函数并处理销毁?假设我有这样的东西:classA{~A(){SomethingA();}}classB:A{}Bb=newB();当B被销毁时,它的析构函数不会被调用吗? 最佳答案 Accordingtothis,itstatesthatDestructorscannotbeinheritedoroverloaded.正确。析构函数不是可继承的成员,也不是虚拟的,因

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中的每个类都有一个终结器,但如果唯一存在的终结器是