Tag: #wcf

如何降低WCF命名管道的完整性

我有一个用C#编写的Internet Explorer加载项,它通过WCF命名管道与.NET桌面应用程序进行通信。 桌面应用程序为netNamedPipeBinding创建ServiceHost,并且IE加载项的每个实例都创建一个ChannelFactory以与应用程序通信。 在Windows XP下一切正常,但在Windows 7的IE保护模式下会抛出exception。 System.ServiceModel.CommunicationException:无法连接到端点’net.pipe://localhost/MyApp.MyID’。 —> System.IO.PipeException:’\。\ pipe … guid …’存在管道端点,但连接失败:访问被拒绝。 (5,0×5) 在保护模式下运行加载项是我必须支持的方案。 我的理解是,如果我降低命名管道的完整性级别,那么我的IE加载项将被允许通过它进行通信。 我的问题是如何做到这一点。 我有设置使用WCF的东西,并希望保持这种方式。 我可以让WCF创建具有较低完整性级别的命名管道吗? 我写了什么代码才能实现这一目标?

如何使WCF服务服务器 – 客户端时差独立?

从测试客户端访问WCF服务时,我遇到以下exception: System.ServiceModel.Security.MessageSecurityException: An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail. —> System.ServiceModel.FaultException: An error occurred when verifying security for the message. — End of inner exception stack trace — 我在网上搜索了这个问题的根本原因。 我发现这主要是由于客户端 – 服务器时间差异造成的。 但我无法找到正确的解决方案。 以下是我的服务器端配置: 和客户端配置: 有人请帮我找到解决这个问题的方法。 更新:当我跟踪exception时,内部exception显示此The security timestamp is […]

EncryptedXml DecryptDocument方法抛出“Bad Data”exception

我为Encrypt / Decrypt Streams写了一个代码块。 代码在我的本地计算机上运行。 但是当我在网上发布我的代码时,解密函数抛出“坏数据”exception这是我的加密和解密函数 private static MemoryStream EncryptStream(XmlDocument xmlDoc, XmlElement elementToEncrypt, string password) { CspParameters cspParams = new CspParameters(); cspParams.KeyContainerName = password; RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams); RijndaelManaged sessionKey = null; try { if (xmlDoc == null) throw new ArgumentNullException(“xmlDoc”); if (rsaKey == null) throw new ArgumentNullException(“rsaKey”); if (elementToEncrypt == null) throw new […]

如何处理WCF客户端断开连接

如何处理WCF客户端断开连接? 我试过CallBacks但它似乎只有在客户端通过使用“断开连接”按钮“清楚地”断开连接时才有效。 我希望在客户端断开连接时通知我的服务器,即使是手动断开连接或客户端进程崩溃。

WCF – 设计参数决策

我正在为FundManagement设计服务。 FundManagement Service有一个名为“UpdateFundApprovalDate(FundDTO fund)”的操作。 此操作将使用fundingID的批准日期更新资金表记录。 该服务将由“FundManagementUI”客户端使用。 如果合同续订正在进行,则有一项业务规则,即不应更新批准日期。 有一个单独的续订服务。 续订服务使用续订表中的数据(其中包含资金ID)。 更新表的结构是(RenewalID,FundingID,RenewalStartDate,Renewal CompletionDate,RenewalStatus)。 有一个名为“public List GetInProgressRenewal(FundDTO fund)”的服务操作。 一点很重要。 虽然两个服务都使用相同的数据库,但“续进”续订应由续订服务决定。 它可以基于续订记录的状态或完成日期。 续订服务决定“进行中”续订的业务逻辑。 FundManagement Service声称没有对该逻辑的所有权。 什么是解释上述行为的SOA原则/模式? (使用续订服务确定“进行中”续订,但续订服务可能会根据自身利益更改逻辑。)。 有关此类情景的指导原则是什么? 对于任何涉及此类设计决定的文章,您有什么建议吗? 在FundManagement Service内部,谁应该负责validation返回的续订列表是否为NULL? 这种validation应该在服务操作方法代码内部还是在FundBusinessLayer内部(服务人员调用)中进行? 注意:这里的SOA将使用WCF实现,业务classess将是使用C#开发的dll。 读: SOA / WCF剖析系统和服务边界

WCF数据服务5.6快速入门

我一直试图让WCF数据服务服务器工作几天。 我终于在今天退缩了,只是尝试完全按照快速启动的方式展示……没有别的……在完全新鲜的项目中。 肯定会有用。 但它没有..它的失败方式与我的其他测试相同。 我只是跟着这个例子 。 使用Visual Studio 2013 for Web Express和托管正在使用IIS Express。 我已安装WCF工具版本5.6,以便Visual Studio具有WFC数据服务5.6模板。 它的要点是 创建ASP.Net应用程序选择MVC类型,不为MVC以外的任何内容添加任何文件夹,也不添加unit testing,个人帐户认证。 为NorthWind数据库添加ADO.Net实体数据模型,在web.config中称为NorthwindEntities,导入所有表。 添加WCF数据服务5.6项,将其命名为NorthWind.svc。 将NorthWind.svc.cs支持代码更改为以下内容。 using System; using System.Collections.Generic; using System.Data.Services; using System.Data.Services.Common; using System.Linq; using System.ServiceModel.Web; using System.Web; namespace StackOverflowApp { public class NorthWindService : DataService { // This method is called only once to initialize service-wide policies. […]

CustomAuthorizationPolicy.Evaluate()方法永远不会在wcf webhttpbinding中触发

我可以看到我创建了一个wcf服务: [OperationContract] [PrincipalPermission(SecurityAction.Demand, Role = “Admin”)] [WebInvoke(Method = “GET”, UriTemplate = “/Data/{data}”)] string GetData(string data); 所以我创建了一个自定义授权,你可以看到: public class AuthorizationPolicy : IAuthorizationPolicy { string id = Guid.NewGuid().ToString(); public string Id { get { return this.id; } } public System.IdentityModel.Claims.ClaimSet Issuer { get { return System.IdentityModel.Claims.ClaimSet.System; } } // this method gets called after the authentication stage […]

在WCF中具有“无法识别的序列”消息的CommunicationException

我在使用WCF服务时遇到了CommunicationException。 消息是: 远程端点不再识别此序列。 这很可能是由于远程端点中止。 wsrm:Identifier的值不是已知的Sequence标识符。 可靠的会议出了问题。 调用契约方法后,会抛出exception。 在调用contract方法之前,通道状态为Opened。 我捕获此exception后恢复我的服务客户端,并且一段时间它工作正常。 但是这个错误再次发生。 似乎超出了一些超时,但我无法理解究竟是哪一个。 我使用带有reliableSession的wsHttpBinding。 InactivityTimeout设置为半小时,我确信它没有被超过,因为exception被抛出更早。

在监听消耗IEnumerable 时,Blocking.Peek()的类似于BlockingCollection

我正在使用Pipelines模式实现来将消费者与生产者分离,以避免缓慢的消费者问题。 如果在消息处理阶段[1]上有任何exception,它将丢失并且不会被分派到其他服务/层[2] 。 我怎样才能在[3]处理这样的问题,所以信息不会丢失,重要的是什么! 消息的顺序不会混淆,因此上层服务/层将按照它们进入的顺序获取消息。我有一个想法涉及其他中间Queue但它看起来很复杂? 不幸的是, BlockingCollection没有暴露Queue.Peek()方法的任何模拟,所以我只能读取下一个可用的消息,并且在成功处理的情况下执行Dequeue() private BlockingCollection messagesQueue; // TPL Task does following: // Listen to new messages and as soon as any comes in – process it foreach (var cachedMessage in messagesQueue.GetConsumingEnumerable(cancellation)) { const int maxRetries = 3; int retriesCounter = 0; bool isSent = false; // On this point a message […]

WCF服务实例的生命周期?

在创建WCF服务的过程中,我遇到了一个对我来说不熟悉的术语。 基本上在指定InstanceContextMode我有几个选项,包括; PerSession , PerSession和Single 。 这是我正在学习的示例中的代码: [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] public class EvalService : IEvalService { … 现在,他说这样做只会在运行时创建一个服务实例。 这是什么意思? 我认为,每次与Web服务建立连接时,它都被视为一个单独的实例。 对于每个请求,它是否仍然存在,这是我的服务实例? 根据文档中提到的其他成员来判断,假设这是它的工作方式是否安全?