Articles of #wcf

C#架构建议:在结构中缓存数据的方法?

我想就C#中可行的架构问你的专家建议。 我有一个C#服务,它响应LAN上本地用户的请求,从互联网上获取数据包,并收集数据以生成结构中的数据数组。 每个数据请求大约需要2秒,并返回4000个字节。 每天可能会有成千上万的请求。 为了加快速度并减少带宽,我需要缓存数据处理的结果,以便第二次和后续访问立即提供给LAN上的任何其他用户(可能有> 50个用户)。 约束: 基础数据永远不会改变,即我不必担心“脏”数据(太棒了!)。 我想要缓存的数据是一个相当复杂的结构,包含DateTime,double等嵌套数组。数据来自互联网提供的数据,使用大量数学。 无论缓存多少数据(即缓存必须限制大小),我都不能使用超过100MB的内存。 我无法通过数字索引索引缓存中的数据,我必须使用日期(“YYYY-MM-DD”)和唯一ID字符串(“XXXXXXXX”)的组合对其进行索引。 它必须很快,即它必须从RAM中提供大部分响应。 缓存中的数据必须每24小时持久保存到磁盘。 以下是我的选择: 使用私有变量(即私有列表或字典)缓存服务器类中的数据,然后偶尔将其序列化为磁盘; 使用数据库; 我对你的专家意见感兴趣。

Windows服务托管TCP WCF服务

我试图在Windows 2008 R2服务器上托管WCF服务作为Windows服务。 我按照msdn( 在这里找到 )提供的指示。 只要一切都是视觉工作室中同一解决方案的一部分,一切都很好。 但是,我尝试在不同的解决方案(在同一台机器上)创建客户端,但无法找到该服务。 我收到如下所示的“添加服务引用错误”。 我的目标是能够远程访问wcf服务,但我似乎甚至无法在本地访问它,除非客户端是在同一客户端内创建的。 是否有任何指南,教程或有用的提示,任何人都可以让我让这个工作? 更新:似乎即使Windows服务正在运行,WCF服务似乎没有监听任何端口。 这表明它没有运行。 这也解释了为什么每个人都认为我没有运行该服务。 我曾经假设,因为Windows服务正在运行并且同一个解决方案客户端工作,所以WCF服务也正常运行。 事实certificate,只要我运行相同的解决方案客户端,Visual Studio就会启动WCF服务。 那么,为什么Windows服务不启动WCF服务呢? 有任何想法吗?

如何使您的服务参考代理URL动态化?

我有一个Web服务的Web引用: using (var client = new GetTemplateParamSoapClient(“GetTemplateParamSoap”)) { TemplateParamsKeyValue[] responsArray = client.GetTemplatesParamsPerId( CtId, tempalteIds.ToArray()); foreach (var pair in responsArray) { string value = FetchTemplateValue(pair.Key, pair.Value); TemplateComponentsData.Add(pair.Key, value); } } 试图从c#代码更改Web引用URL:作为建议: 1) http://www.codeproject.com/KB/XML/wsdldynamicurl.aspx 2) 如何使用可配置的URL调用Web服务 3) http://aspalliance.com/283_Setting_Web_Service_References_Dynamically 但是当我尝试做的时候,我发现符号丢失了: client.Url 另外我找不到“Url_behavior”的属性

ASP MVC和WinForm应用程序之间的通信

我正在寻找用户可以在ASP和Winform应用程序之间进行通信的方式。 我正在寻找像soluto.com这样的东西,我想让用户通过网站向其他计算机发送命令。 因此,假设用户注册了10台计算机,这些计算机已在mvc应用程序上注册。 用户可以选择所有10台计算机,并通过单击按钮发送“执行此任务”。 我想的是,Winform将创建一个httplisten服务器。 每次winform打开时,它都会向mvc发送一个“我在线”的post以及IP:端口。 服务器将在需要时向该ip:端口发送请求。 这种方法似乎非常不安全,有一个开放的端口,配置防火墙等,似乎是一种矫枉过正。 我想知道是否有任何其他方式来实现这一点。 感谢您的帮助。 PS在您宣称这是一个愚蠢的想法之前,Piriform也在做这样的事情。 看看Agomo.com

WCF执行错误:此工厂启用了手动寻址,因此必须预先发送所有发送的消息

我有一个使用WebHttpBinding托管的WCF服务。 服务非常简单,是一个接受多个参数的操作合同。 使用“添加服务引用”后自动生成的我的WCF客户端无法直接使用WCF服务。 该错误仅发生在WebHttpBinding而不是其他错误。 服务器端 [OperationContract] [WebInvoke(Method = “POST”, UriTemplate = “Submit2String”, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped)] string Submit2String(string input1, string input2); 客户端 ExpenseServiceClient proxy = new ExpenseServiceClient(); proxy.Submit2String(“test1”, “test2”); 当我测试运行上面的代码时,我收到以下错误: Error: InvalidOperationException was unhandled by user code Manual addressing is enabled on this factory, so all messages sent must be […]

在运行时提供ServiceKnownType?

我在合同中使用了超过100个ServiceKnownType的WCF接口,如下所示: [ServiceKnownType(typeof(RowUser))] [ServiceKnownType(typeof(RowRegion))] [ServiceKnownType(typeof(RowDocument))] [… loads more …] [ServiceContract(SessionMode = SessionMode.Required)] public interface IServiceBrowse : IDisposable { [OperationContract] void Insert(Row satz); } 有没有办法在运行时提供这些ServiceKnownTypes? 将所有这些ServiceKnownTypes添加到源代码中不仅容易出错且繁琐,而且我的程序集以我不喜欢的方式绑定在一起(我希望能够将这些类型提取到子组件中以将它们分离,但不能,因为服务需要列出所有已知的类型)。

使用Windows服务上托管的WCF对ADFS进行身份validation

我有一个wcf服务,查询ADFS的SAML令牌。 这是从Web到查询ADFS并获取SAML令牌的常见代码段。 然而它总是最终在线返回通道处断开。问题(rst); 。 错误是ID3082:请求范围无效或不受支持。 至少在高级别,我无法确定错误是在ADFS服务器端还是在配置WCF服务的方式或代码中。 请帮忙。 public SecurityToken GetSamlToken() { using (var factory = new WSTrustChannelFactory( new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential), new EndpointAddress(new Uri(“https://serv/adfs/services/trust/13/usernamemixed”)))) { factory.Credentials.UserName.UserName = “username”; factory.Credentials.UserName.Password = “password”; factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None; factory.TrustVersion = TrustVersion.WSTrust13; WSTrustChannel channel = null; try { string KeyType; var rst = new RequestSecurityToken { RequestType = WSTrust13Constants.RequestTypes.Issue, AppliesTo = new […]

SSL / TLS中的相互身份validation

我是SSL身份validation的新手,我需要使用SSL在信任边界上validation两个架构组件(我可以控制这两个组件)。 我想我需要双向SSL身份validation,服务器和客户端都有证书。 证书可以自签名吗? (即,由供应商签名,这不会首先使用SSL取消?或者我是否需要第三方validation服务以确保证书的身份?) 握手如何在服务器和客户端的公钥和私钥方面工作? 我将不得不在IIS中配置服务器以使用cetificate,并使用请求发送客户端证书(最有可能通过使用WCF配置?),但是还有其他任务我必须做才能使其工作吗?

共享WCF服务和客户端之间的接口(标记为W / ServiceContract)

我正在使用VS2010和.NET 4.0。 我已经在这里检查过( 共享在WCF服务中实现的接口 ),但它的不同之处在于我要完成的工作涉及一个标有ServiceContract的接口。 即在服务中,我有一个接口A(标记为ServiceContract)和一个扩展接口B(也标记为ServiceContract)。 B由WCF服务实现。 确切的扩展如下: public interface A public interface B : A (“SpecificType”标记为DataContract。) 显然,B在代理生成过程中暴露给WCF客户端; 但是,我还需要公开接口A(我正在实现一个半通用的pub / sub系统,而“发布者”需要能够检查/依赖接口A)。 我尝试解决这个问题的第一种方法是创建一个包含接口的独立“共享”程序集,并且可以由服务和客户端使用; 然而,最终效果不好,因为在发布者中,它需要确保B的实例实际上从A正确扩展。这种隐式转换失败,可能是因为服务引用似乎并不完全jive与“共享”程序集。 为了解决这个问题,我手动编辑了Re​​ference.cs文件并最终正常工作(我添加了接口A的定义,并确保接口B正确引用它)。 但这带来了一个很大的问题,即每次更新服务引用时,此代码都将被删除。 看过这个网站和其他网站上的其他WCF响应,我似乎找不到确切的答案(也许我只是没有完成所有这些和他们的回复)。 如果有人能指出我正确的方向,我会很感激。 谢谢。

wcf“关闭客户端后,远程主机强行关闭现有连接”

关闭客户端程序后,我收到错误“远程主机强行关闭现有连接”。 我添加了此代码以确保在程序关闭时关闭客户端连接。 我还有一个关闭客户端的按钮,按钮工作没有错误。 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { try { client.Close(); } catch (CommunicationException ex) { client.Abort(); } catch (TimeoutException ex) { client.Abort(); } catch (Exception ex) { client.Abort(); throw ex; } } 我在这里想念一下吗? 这是堆栈跟踪: bei System.ServiceModel.Channels.SocketConnection.HandleReceiveAsyncCompleted() bei System.ServiceModel.Channels.SocketConnection.OnReceiveAsync(Object sender, SocketAsyncEventArgs eventArgs) bei System.ServiceModel.Channels.SocketConnection.OnReceiveAsyncCompleted(Object sender, SocketAsyncEventArgs e) bei System.Net.Sockets.SocketAsyncEventArgs.OnCompleted(SocketAsyncEventArgs e) bei System.Net.Sockets.SocketAsyncEventArgs.FinishOperationAsyncFailure(SocketError socketError, […]