Tag: wcf

在使用Windows服务和SQL Server的OneWay WCF消息中排队

我需要实现WCF服务请求的排队机制。 该服务将被客户以单向的方式调用。 这些请求消息应该存储在SQL Server数据库中,并且Windows服务将消息排队。 处理请求的时间将是可configuration的。 如果在处理消息时出现错误,则需要重试100次,如果仍然失败,则需要终止。 还应该有一个机制来监测一天中进行的交易次数和失败次数。 质询 如果我使用MSMQ,则客户端可能已经将消息转发到队列,而不知道服务端点。 但是我正在使用SQL Server来存储请求消息。 客户端如何将请求发送到SQL Server? 解决scheme是否可行? 我们是否有任何文章/书籍解释如何实现上述? 在这种情况下,防止服务和客户端达到故障状态的步骤是什么? 将传入消息存储到数据库的最佳方法是什么? 实施重试机制的最佳方法是什么? 任何事情已经存在,所以我不必重新发明轮子? 有没有解释这个实现的书/文章? 笔记 消息的内容将是复杂的XML。 例如员工的差旅费用项目或员工名单。 读 将WCF请求logging到数据库 保证WCF服务中的数据处理 MSMQ与SQL Server Service Broker的比较 是否有可能坚持,然后将WCF消息转发到目标服务? WCF 4路由服务 – 协议桥接问题 https://softwareengineering.stackexchange.com/questions/134605/designing-a-scalable-and-robust-retry-mechanism 集成SQL Service Broker和NServiceBus 用户是否也可以在NServiceBus中发布/发送消息?

合同优先SOA:devise业务领域:WCF

我正在构build一个使用WCF的全新系统。 我将使用契约优先方法来构build基于面向服务概念的服务。 我有一个服务操作,返回一个用户的银行帐户的详细信息。 该帐户可以是“FixedAccount”或“SavingsAccount”types。 我devise的服务如下。 [ServiceContract] interface IMyService { [OperationContract] AccountSummary AccountsForUser(User user); } [DataContract] class AccountSummary { [DataMember] public string AccountNumber {get;set;} [DataMember] public string AccountType {get;set;} } 这很好。 现在,我需要开发此服务的业务领域。 我可以想到两个select(任何新的方法总是受欢迎的) 1) 方法1 :提出一个BankAccount基类。 从它派生的专门类是“FixedAccount”和“SavingsAccount”。 BankAccount将有一个方法为Transfer(string toAccount)。 这成为我们熟悉和有效的OOAD。 这涉及到AccountSummary DTO和FixedAccount / SavingsAccount域类之间映射的映射器。 2) 方法2 :不使用映射器转换层。 问题 1)假设我正在使用方法1.是否有任何文章/教程解释如何根据DTO(条件映射)中的AccountType值将AccountSummary DTO映射到FixedAccount / SavingsAccount域类? 2)如何在方法2中完成任务? 读:- http://www.soapatterns.org/service_facade.php SOA架构数据访问 […]

读取XML数据时,超过了最大string内容长度限额(8192)

我试图传递一个大的string(24,000到50,000个字符)到一个自托pipe的TCP WCF服务。 我已经把maxStringContentLength(无处不在)设置为22008192。 我读了一些地方,我需要将bindingConfiguration更改为“LargeBuffer”或“LongFields”,但是当我这样做: <endpoint address="" binding="netTcpBinding" bindingConfiguration="LongFields" contract="ExStreamWCF.IService1"> 或这个: <endpoint address="" binding="netTcpBinding" bindingConfiguration="LargeBuffer" contract="ExStreamWCF.IService1"> 我的服务无法启动。 我真的需要这个错误消失。 有任何想法吗? 谢谢, 贾森 PS-config文件从服务器上的tcp服务: <system.serviceModel> <services> <service behaviorConfiguration="ExStreamWCF.Service1Behavior" name="ExStreamWCF.Service1"> <endpoint address="" binding="netTcpBinding" bindingConfiguration="" contract="ExStreamWCF.IService1"> <identity> <dns value="Devexstream-2.anchorgeneral.local" /> <!–<dns value="vmwin2k3sta-tn2" />–> </identity> </endpoint> <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://Devexstream-2:8080/Service" /> <!–<add baseAddress="net.tcp://vmwin2k3sta-tn2:8080/Service" />–> </baseAddresses> […]

xmlHttp.getResponseHeader +不适用于CORS

我在.NET 4上有一个asp.net WCF。这个服务用来authentication用户。 我们正在提交一个用户名和密码,然后应该返回一个HTTP头,包括authenticationcookie。 使用本地托pipe的testing页面,这是正常工作。 我现在正试图访问标题信息跨域。 我已经在另一台机器上安装了我的testing页面,并将其configuration为与WCF进行通话。 通话正在进行,通话中的“数据”回复是正确的。 但是,我无法使用以下任一项访问标题信息: alert(xmlHttp.getAllResponseHeaders()); 要么 alert(xmlHttp.getResponseHeader("Set-Cookie")); 使用IE中的debugging器和Firefox的“Live HTTP Header”插件,我可以看到正在返回的头信息。 在我的全球ajax页面,我设置处理CORS的响应。 private void EnableCrossDomainAjaxCall() { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); if (HttpContext.Current.Request.HttpMethod == "OPTIONS") { HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); HttpContext.Current.Response.End(); } } 这是我用来调用服务的AJAX: $("#btnLogin").click(function (e) { var geturl; geturl = $.ajax({ // type: "POST", type: […]

使ASP.NET WCF将字典转换为JSON,省略“Key”和“Value”标记

这是我的困境。 我正在使用一个RESTful ASP.NET服务,试图获得一个函数来返回这种格式的JSONstring: {"Test1Key":"Test1Value","Test2Key":"Test2Value","Test3Key":"Test3Value"} 但是我用这种格式来取代它: [{"Key":"Test1Key","Value":"Test1Value"}, {"Key":"Test2Key","Value":"Test2Value"}, {"Key":"Test3Key","Value":"Test3Value"}] 我的方法如下所示: [OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] public Dictionary<string, string> Test(String Token) { if (!IsAuthorized(Token)) return null; if (!IsSecure(HttpContext.Current)) return null; Dictionary<string, string> testresults = new Dictionary<string, string>(); testresults.Add("Test1Key", "Test1Value"); testresults.Add("Test2Key", "Test2Value"); testresults.Add("Test3Key", "Test3Value"); return testresults; } 有什么办法可以摆脱那些“关键”和“价值”标签只使用内置的ASP.NET工具? (即,我宁愿不使用JSON.NET,如果它是可以避免的) 非常感谢! […]

.Net:加载程序集时运行代码

加载程序集时是否可以运行一些代码,而不需要在加载代码中做任何特定的操作? 我正在寻找的就像一个types的静态构造函数。 例如: 大会A不知道大会B,但是B知道大会A.大会A需要知道关于B的某些事情,如果B加载。 当程序集B由运行时加载(引用或显式)时,我想要执行一个代码段(静态方法或属性),调用程序集A中的一个方法。 这个问题的根本原因是序列化A中的types时遇到的未知types,该types包含在编译时未知的B中的types,因为使用了接口。

找不到查询模式的实现

在我的Silverlight应用程序中,我试图用LINQ创build一个数据库连接。 首先我添加一个新的LINQ to SQL类,并将我的表“tblPersoon”拖入它。 然后在我的服务文件中,我尝试执行以下查询: [OperationContract] public tblPersoon GetPersoonByID(string id) { var query = (from p in tblPersoon where p.id == id select p).Single(); 但在tblPersoon它给我以下错误。 找不到源types为“SilverlightApplication1.Web.tblPersoon”的查询模式的实现。 '哪里找不到'。 甚至当我尝试以下: var query = (from p in tblPersoon select p).Single(); 它给了我一个错误,说'select'没有find! 为我的表生成的类的代码可以在这里find: http : //pastebin.com/edx3XRhi 是什么原因造成的,我将如何解决这个问题? 谢谢。

IIS WCF服务托pipe与Windows服务

我们开发了一个WCF服务,我们正在考虑部署它。 我们的客户将使用它与basicHttpBinding但我们的内部团队将与namedPipesBinding使用它。 我们想知道在IIS 7或Windows服务中托pipe它是否更好。 我们运行了一些testing,发现当我们在IIS中添加绑定时,它不会更新我们服务的configuration文件。 这意味着我们需要在两个不同的地方维护configuration。 这不合逻辑,对吧? 我们还在StackOverflow上看到,当WCF服务是IIS中的主机时,基地址被忽略(请参阅有关<baseAddresses>的WCF服务configuration文件问题 )

运行WCF ServiceHost多个合同

运行一个单一的合同ServiceHost工作正常,像这样: servicehost = new ServiceHost(typeof(MyService1)); servicehost.AddServiceEndpoint(typeof(IMyService1), new NetTcpBinding(), "net.tcp://127.0.0.1:800/MyApp/MyService1"); servicehost.Open(); 现在我想添加第二个(第三,第四,…)合同。 我的第一个猜测是只需要添加像这样的更多端点: servicehost = new ServiceHost(typeof(MyService1)); servicehost.AddServiceEndpoint(typeof(IMyService1), new NetTcpBinding(), "net.tcp://127.0.0.1:800/MyApp/MyService1"); servicehost.AddServiceEndpoint(typeof(IMyService2), new NetTcpBinding(), "net.tcp://127.0.0.1:800/MyApp/MyService2"); servicehost.Open(); 但是,这当然是行不通的,因为在创buildServiceHost时,我可以将MyService1作为参数或MyService2传递 – 这样我就可以将很多端点添加到我的服务中,但都必须使用相同的合同,因为我只能提供一个实现? 我有这种感觉,我错过了这一点。 当然,必须有某种方法来为我添加的每个端点合同提供一个实现吗?

增加WCF服务中的超时值

如何在WCF服务上将默认超时时间增加到大于1分钟?