Tag: #wcf

在WCF服务返回DataTable时需要帮助解决错误:OutOfMemoryException

我有一个正在尝试返回DataTable的WCF服务。 service方法使用SqlDataReader ,然后使用DataTable.Load()将该数据输入到它想要返回的DataTable 。 问题:当服务方法返回一个大表时(我稍后会定义它),我在调试输出中得到这些exception(它们不会削弱服务): SMDiagnostics.dll中出现类型为“System.OutOfMemoryException”的第一次机会exception SMDiagnostics.dll中发生了’System.InsufficientMemoryException’类型的第一次机会exception “大”的定义:我测试中返回的记录集包含286760条记录,当该表导出为文本时,大小约为800MB。 我知道这都是相对的,所以这可能都是毫无意义的。 大多数情况下,我指出这一点是因为对于我来说,抛出内存exception似乎相当小,特别是考虑到我正在测试的开发机器有8GB内存这一事实。 同样,它都是相对的,也许是无关紧要的,但我正在努力提供足够的信息。 这是我的连接代码: NetTcpBinding netBind = new NetTcpBinding(); netBind.Security.Mode = SecurityMode.Transport; netBind.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows; netBind.MaxReceivedMessageSize = Int32.MaxValue; netBind.MaxBufferSize = Int32.MaxValue; netBind.MaxBufferPoolSize = 0; netBind.MaxConnections = 300; netBind.ListenBacklog = 300; netBind.ReaderQuotas = XmlDictionaryReaderQuotas.Max; netBind.PortSharingEnabled = true; netBind.OpenTimeout = new TimeSpan(0, 0, RegistryValues.DatabaseTimeout); netBind.CloseTimeout = new TimeSpan(0, 0, […]

对WCF Http服务的重复请求

我们有一个桌面应用程序,它通过许多WCF端点与服务器通信。 我们偶尔会在某些端点收到重复请求。 我们花了很多时间来检查为什么客户端代码可能会发送重复的请求,我们认为现在已经很好地锁定了。 但是,我们会继续收到重复的请求。 除了客户端明确发送两个请求之外,还有任何理由我们收到重复的http请求吗? 我收到500个结果代码后会自动重试一些http客户端,但我不认为这是.NET http客户端的情况。

在UWP中使用基于CMS的格式签名数据

我需要在WCF服务和UWP应用之间传输数据。 所以我在收到数据后签名并validation数据。 我有个问题。 WCF中签名的数据结果是UWP应用程序的差异。(当然,我无法validation数据)这是我的源代码: // WCF private String Sign(string Message) { ContentInfo cont = new ContentInfo(Encoding.UTF8.GetBytes(Message)); SignedCms signed = new SignedCms(cont, true); _SignerCert = new X509Certificate2(“Path”, “Password”); CmsSigner signer = new CmsSigner(_SignerCert); signer.IncludeOption = X509IncludeOption.None; signed.ComputeSignature(signer); return Convert.ToBase64String(signed.Encode()); } 和 //UWP public static async Task Sign(String Message) { StorageFolder appInstalledFolder = Windows.ApplicationModel.Package.Current.InstalledLocation; var CerFile = […]

WCF关闭连接/释放资源

我最近将我的ASMX服务转换为WCF以利用Sessions。 我已经回顾了MSDN上的一些Sessions教程,但仍不确定我的代码中有一个很好的设置。 截至目前它的工作原理,但我不确定为什么。 我有 [ServiceContract (SessionMode = SessionMode.Required, Namespace = “http://smartshopservice.org”)] 然后我有 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] public class SmartShopService : SmartShopInterface { private static Shopper sh = new Shopper(); private List data = new List(); 我的问题的第一部分是Shopper是否是我的“全局”变量。 我希望它始终存在,而其他所有内容,如“数据”,每个会话都会实例化。 我也适当地设置了WebConfig。 还有什么我需要做的吗? 我的第二个问题是如何关闭一个会话,然后刷新所有这些变量? 我的客户端现在是一个WebClient,它正在这样沟通: static GarfieldService.SmartShopInterfaceClient service = new GarfieldService.SmartShopInterfaceClient(); 它似乎工作,我有ASP.NET页面的onbody =“”来调用如下所示的函数: [WebMethod] public static bool Connect() { try […]

WCF基于params的自定义序列化

我是否可以实现一些自定义序列化(SOAP)来仅序列化可以动态更改的字段 类: [DataContract] public class Video { … [DataMember] public int Width { get; set; } [DataMember] public int Height { get; set; } [DataMember] public short Bitrate { get; set; } [DataMember] public short Framerate { get; set; } [DataMember] public long Duration { get; set; } [DataMember(EmitDefaultValue = false)] public VideoType Type { […]

如何更改默认的WCF服务绑定?

在我的WCF中,我有一些服务。 其中一个必须对邮件大小有更大的限制,所以我必须创建另一个绑定并更改配置。 但是……我无法在Web.config中看到我的服务的任何配置 – 没有。 什么是默认的? 那么我可以在哪里更改服务绑定?

编辑ObservableCollection的SelectedItem没有绑定控件看到编辑直到它们被保存

我有一个包含ListView和“编辑”按钮的视图。 ListView的ItemSource绑定到底层视图模型上的ObservableCollection属性。 其SelectedItem属性也绑定到视图模型。 单击编辑按钮时,现有视图模型将启动编辑视图/视图模型对(“编辑屏幕”),允许用户编辑当前选定的Account 。 要编辑的Account由主视图模型的SelectedItem属性确定。 问题:即使在单击编辑屏幕的“保存”按钮之前,编辑屏幕中所做的任何更改都会立即反映在其他屏幕的ListView 。 为什么会发生这种情况有意义 – 在更改属性并且ListView正在处理这些通知时, Account正在提升属性更改事件。 期望的结果:绑定控件(如ListView )只应在单击“保存”后才能看到编辑屏幕更改。 可能的解决方案 在编辑过程中暂停帐户的属性更改通知。 缺点:如果在编辑Account实例时执行手动数据绑定更新,则“正在进行”更改将显示在ListView上,即使这些更改尚未引发通知。 此外,如果用户为同一个Account启动第二个编辑窗口,他们将看到“正在进行中”更改。 想法被拒绝。 让编辑屏幕视图模型将Account实例包装在某种EditingAccount类中,该类仅在调用Save()时Save()对其所做的更改复制回原始Account 。 编辑屏幕是否应承担促进此包装的责任,还是应该要求服务层执行此操作? 你怎么看待这些选择? 遇到它时如何解决这个问题?

在wcf安全模式设置中设置时钟偏差的目的是什么

我的WCF应用程序中的时钟偏差导致了问题。 我很困惑为什么微软设定这个规则。 当服务器和客户端之间的时钟偏差超过设置的最大值时,为什么服务拒绝了请求。 (我不确定它是否被服务器拒绝,它以任何方式引发exception)。 在wcf安全模式设置中设置时钟偏差的目的是什么?

当InstanceContextMode设置为PerSession时,如何为所有客户端运行一次WCF服务构造函数?

当ServiceBehaviorAttribute.InstanceContextMode设置为PerSession如何仅在WCF服务的构造函数中运行一次代码? [ServiceBehavior( InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)] public class SomeService : ISomeService { public SomeService() { this.RunThisOnceForAllClients(); } private void RunThisOnceForAllClients() { } } 或者,如何在WCF服务运行后自动运行方法,但是对于所有客户端调用它只会运行一次 ? 请帮忙。 提前致谢。 我使用托管Windows服务部署我的WCF 服务 。 我的代码是在C#中。 框架在.NET 4中。项目是在Visual Stuido 2010 Professional中构建的。 该服务由Windows窗体应用程序使用。 如果你想知道为什么我需要像这样做,我需要执行一个 Uploader 方法,将服务的数据库上传到另一个服务,但它将在一定时间内执行,所以我把它放在另一个线程只要服务正在运行,它就会一直运行。

有没有办法在单声道中使用WCF Discovery?

我正在尝试让WCF Discovery在单声道3.2.8中工作。 单声道网页提到了许多Discovery行为应该存在,但我无法通过代码设置或App.config设置来使其工作。 这在.net中100%有效,所以我知道至少原则是正确的。 这类似于未解决的问题: WCF Udp Discovery in mono 但是,我的具体问题是:有没有办法在单声道中使用WCF Discovery? App.config安装程序提供此错误: [ERROR] FATAL UNHANDLED EXCEPTION: System.Configuration.ConfigurationErrorsException: Error deserializing configuration section behaviors: Invalid element in configuration. The extension name ‘serviceDiscovery’ is not registered in the collection at system.serviceModel/extensions/behaviorExtensions 代码设置会出现此错误: System.InvalidOperationException: Contract ‘TargetService’ is not implemented in this service ‘MyService’ 如果需要,我可以提供代码,但由于我要求另一种有效的方法,我不相信它在这一点上是必需的。 如果您在4.5中引用Mono System.ServiceModel.Discovery – 您会注意到CreateBehavior()上有一个NotImplemented图标(位于:System.ServiceModel.Discovery.Configuration.ServiceDiscoveryElement),这似乎是我的问题的根本原因。