Tag: #wcf

请求通道在等待回复时超时

我有一个小应用程序,它使用WCF与Web服务器通信。 该程序由大约200个客户端使用,每个客户端以大约5-20个请求/分钟发送。 查看错误日志我经常得到: 在00:00:59.9989999之后等待回复时,请求通道超时 请求如下: ClientService Client = new ClientService(); Client.Open(); Client.updateOnline(userID); Client.Close(); 这是app.config 在“多次通话”中,每天约200-800人失败。 约n-1是好的。 我很困惑这个问题是什么。 查看服务器统计信息,它几乎没有出汗 – 每个请求都需要<2秒才能处理。 它发送的数据包括“int”或“非常小的字符串” – 所以,它不是由于大小,如果是 – 应该有一致的失败.. 建议?

WCF服务合同可以有一个可以为空的输入参数吗?

我的合同定义如下: [OperationContract] [WebGet(UriTemplate = “/GetX?myStr={myStr}&myX={myX}”, BodyStyle = WebMessageBodyStyle.Wrapped)] string GetX(string myStr, int? myX); 我得到一个例外:[InvalidOperationException:合同’IMyGet’中的’GetX’操作有一个名为’myX’的查询变量,类型为’System.Nullable 1[System.Int32]’, but type ‘System.Nullable 1 [System.Int32 ”不能通过’QueryStringConverter’转换。 UriTemplate查询值的变量必须具有可由“QueryStringConverter”转换的类型。 找不到任何有关此错误的信息,除了以下链接: http : //blog.rolpdog.com/2007/07/webget-and-webinvoke-rock.html这有点旧 ,而不是解决方案。 任何想法除了摆脱可以为空的参数做什么? 谢谢。

完成使用后,是否需要关闭.NET服务引用客户端

我试图找出在完成使用后关闭.net服务引用客户端是否有必要。 几乎我在网上遇到的所有例子似乎都没有,但生成的客户端实现了IDisposable,因为它确实打开了与服务的连接,我的直觉告诉我你需要关闭那个连接。完成它。 这是我从http://msdn.microsoft.com/en-us/library/bb386386(v=VS.90).aspx中提取的代码示例: private void button1_Click(System.Object sender, System.EventArgs e) { ServiceReference1.Service1Client client = new ServiceReference1.Service1Client(); string returnString; returnString = client.GetData(textBox1.Text); label1.Text = returnString; } 我认为你至少应该在这个方法结束时调用client.Close(),最好还是在using语句中包装第一行。 我只是希望得到一些反馈,以找出最佳实践。

两个.Net应用程序之间的高效通信

我目前正在c#中编写一个.Net应用程序,它有两个主要组件: DataGenerator – 一个生成大量数据的组件 Viewer – 一个WPF应用程序,能够可视化生成器创建的数据 这两个组件目前是我的解决方案中的两个独立项目。 此外,我正在使用PRISM 4.0框架,以便从这些组件中创建模块。 实质上,DataGenerator使用PRISM的EventAggregator生成大量数据并发送事件,Viewer会订阅这些事件并显示为用户准备的数据。 现在我的要求略有改变,现在两个组件将在他们自己的应用程序中运行(但在同一台计算机上)。 我仍然希望所有的通信事件驱动,我还想使用PRISM框架。 我的第一个想法是使用WCF进行这两个应用程序之间的通信。 然而,有一件事让生活变得更加艰难: DataGenerator完全不了解 Viewer( 也没有依赖关系 ) 如果我们没有打开查看器,或者我们关闭查看器应用程序,DataGenerator应该仍然可以正常工作。 当前很多事件都是从DataGenerator上升的(使用EventAggregator):WCF是否足够高效,可以在很短的时间内处理大量事件? 基本上所有这些事件所携带的数据都是非常简单的字符串,整数和布尔值。 如果没有WCF,可以采用更轻量级的方式吗? 最后,如果DataGenerator可以发送这些事件并且可能有多个应用程序订阅它们(或者没有),那将是很好的。 任何建议和提示都非常感谢。 谢谢! 基督教 编辑1 我现在正在创建两个简单的控制台应用程序(一个托管服务并发送消息,另一个接收消息)使用WCF和回调(如建议的那样)。 一旦我开始工作,我将添加工作代码。 编辑2 好的 – 管理一个简单的程序运行! :)谢谢你的帮助,伙计们! 以下是代码和图片的位置: 让我们从发件人开始: 在我的应用程序中,发件人包含服务接口及其实现。 IMessageCallback是回调接口: namespace WCFSender { interface IMessageCallback { [OperationContract(IsOneWay = true)] void OnMessageAdded(string message, DateTime timestamp); } } […]

.Net Remoting与WCF

我想知道我可以从.net远程处理和WCF做同样的事情,那么为什么WCF比.Net远程处理更受欢迎。 我在哪里可以选择(或在哪种情况下).Net远程处理或WCF?

(Mis)使用C#迭代器实现协同程序的缺陷

我正在编写重构Silverlight程序,以从WCF服务中消耗其现有业务逻辑的一部分。 在这样做时,我遇到了Silverlight 3中的限制,它只允许对WCF服务的异步调用,以避免长时间运行或无响应的服务调用阻塞UI线程(SL有一个有趣的排队模型来调用WCF服务)在UI线程上)。 因此,编写曾经简单明了的内容变得越来越复杂( 请参阅我的问题末尾的代码示例 )。 理想情况下,我会使用协同程序来简化实现,但遗憾的是,C#目前不支持协同程序作为本机语言工具。 但是,C#使用yield return语法确实具有生成器(迭代器)的概念。 我的想法是重新使用yield关键字,以允许我为相同的逻辑构建一个简单的协同模型。 然而,我不愿意这样做,因为我担心可能会有一些隐藏的(技术性)陷阱,我没有预料到(鉴于我对Silverlight和WCF的相对缺乏经验)。 我也担心未来的开发人员可能不清楚实现机制,并且可能会阻碍而不是简化他们将来维护或扩展代码的工作。 我已经在SO上看到了关于重构迭代器以构建状态机的问题: 使用“yield”关键字实现状态机 ,虽然它与我正在做的事情不完全相同,但它确实让我暂停。 但是,我需要做一些事情来隐藏服务调用的复杂性,并管理此类更改中的缺陷的工作量和潜在风险。 我对可以用来解决这个问题的其他想法或方法持开放态度。 原始的非WCF版本的代码看起来像这样: void Button_Clicked( object sender, EventArgs e ) { using( var bizLogic = new BusinessLogicLayer() ) { try { var resultFoo = bizLogic.Foo(); // … do something with resultFoo and the UI var resultBar = bizLogic.Bar(resultFoo); // … […]

学习新技术的最佳方法是什么?

我想知道什么是学习“新”技术的最佳方式(例如LINQ,WPF,WCF,AJAX,最新的C#3.0等)? 你是如何学到最好的? 是通过书籍,网络广播,在线文章,教程,示例还是动手实验? 另外,你如何确保你会记住学到的东西? (再读一本书/文章?深入挖掘你认为已经熟悉的话题?)

在新AppDomain中建立的第一个WCF连接非常慢

我有一个我使用的库,它使用WCF调用http服务来获取设置。 通常,第一次调用需要约100毫秒,后续调用只需几毫秒。 但是我发现当我创建一个新的AppDomain时,来自该AppDomain的第一个WCF调用需要2.5秒。 有没有人解释或解决为什么在新的AppDomain中首次创建WCF频道需要这么长时间? 这些是基准测试结果(当在64位版本中没有附带调试器的情况下运行时),请注意第二组数字中的第一个连接如何延长25倍以上 Running in initial AppDomain First Connection: 92.5018 ms Second Connection: 2.6393 ms Running in new AppDomain First Connection: 2457.8653 ms Second Connection: 4.2627 ms 这不是一个完整的例子,但显示了我生成这些数字的大部分内容: class Program { static void Main(string[] args) { Console.WriteLine(“Running in initial AppDomain”); new DomainRunner().Run(); Console.WriteLine(); Console.WriteLine(“Running in new thread and AppDomain”); DomainRunner.RunInNewAppDomain(“test”); Console.ReadLine(); } } […]

高负载服务器负载均衡,使用WCF和MSMQ

目前我正在开发一个空间数据处理服务器。 以下是要求: 服务器必须能够每秒接收和处理大约150-200条小消息(gps修复,一些其他数据)。 它必须是可扩展的。 例如,在多台机器上运行并平衡负载本身(没有nlb) 目前我已经测试过这种架构: 传入消息服务,仅负责获取消息(不带msmqwcf绑定) 消息解析器服务。 从msmq获取消息,解析它们并写入db,同时向下一个服务发送通知(再次使用普通的MSMQ互操作)。 这个可以在几台PC上工作 数据发布者服务。 包含小缓存并负责从db获取请求的数据。 通过wcf使用TCP绑定向客户端发送通知。 此外,所有服务都具有配置方法和通过WCF TCP绑定调用的一些其他任务。 小的性能测试表明它的工作速度非常快,但我想知道这是将这些MSMQ和WCF一起用于这个特定应用程序的最佳方式。 或者也许有人可以给我一个指导方向?

测试WCF Web服务?

我想为WCF服务创建一个测试类。 我相信“嘲笑”是正确的用语吗? 我不确定我认为必须这样做的方式是正确的方法。 我得到了一个WCF服务的URL,例如: http:://somesite.com/wcf/RealService.svc 和: http:://somesite.com/wcf/RealService.svc?wsdl 因此,我没有将RealService.svc实际添加到我的项目作为Service Reference只是向我的项目Service1添加了一个新的空WCF Service 。 然后我想使用wsdl.exe (或者可能是svcutil.exe?)工具从WSDL url生成一个接口: http:://somesite.com/wcf/RealService.svc?wsdl 。 然后我打开Service1.cs文件而不是让它inheritance自IService1.cs我让它从生成的interfaceinheritance。 然后,我只需要调用我的Service1类,而不是在我的应用程序中调用实际服务。 这是一个嘲弄网络服务的工作方式..? 还需要弄清楚如何使用svcutil工具实际生成一个interface (我读过我不能将Wsdl.exe用于WCF服务?)。 所以任何提示都非常受欢迎!