Tag: azure service fabric

更新Service Fabric服务时,.Net Framework类库dll总是会更改

我有一个在Service Fabric中运行的无状态.Net Core服务。 在我的服务中,我引用了一个针对.Net Framework 4.7.1的类库。 我通过VSTS部署应用程序,其中一个构建步骤更新了带有更改的服务的应用程序版本。 https://docs.microsoft.com/en-us/vsts/build-release/tasks/utility/service-fabric-versioning 除了始终检测到类库的dll文件的更改外,一切正常。 即使我没有改变代码库中的任何东西! 这会导致构建步骤影响每个服务的版本。 不只是实际有更新的服务。 日志看起来像吼叫。 ‘MyClassLibrary.dll’是一个.Net Framework类库,我没有触及过代码。 2018-03-12T11:39:51.1989307Z Searching service ‘MyServicePkg’ for changes… 2018-03-12T11:39:51.2247570Z Searching package ‘Code’ for changes… 2018-03-12T11:39:51.9878149Z The file ‘MyClassLibrary.dll’ has changed. 2018-03-12T11:39:54.3850926Z Updated package ‘MyServicePkg\Code’ from version ‘1.0.0’ to ‘1.0.1’. 我知道代码包中的更改检查是二进制比较。 所以二进制文件在编译时显然会发生变化。 但是,我不知道为什么。 我还有针对.Net Standard 2.0的代码库,它们不会导致此问题,因为只有在我实际触及代码时才会检测到更改。 我也知道可以手动省略不应该从应用程序包https://stackoverflow.com/a/34886586更新的文件。但是,这不是一个选项,因为部署链是自动的。 所以我有以下问题: 是什么原因导致.Net Framework类库的二进制文件发生变化? 它与.Net标准类库有何不同? 我如何解决它,以便我的服务只在我做出真正的更改时更新? 从.Net […]

azure色的服务面料可靠的字典linq查询非常慢

我在服务结构状态服务中有一个可靠的字典。 我有一个简单的linq表达式。 我正在使用Ix-Async包来构建一个asyncenumerable。 using (ITransaction tx = this.StateManager.CreateTransaction()) { var result = (await customers.CreateLinqAsyncEnumerable(tx)) .Where(x => x.Value.NameFirst != null && x.Value.NameFirst.EndsWith(n, StringComparison.InvariantCultureIgnoreCase)) .Select(y => y.Value); return await result.ToList(); } 数据分为2个分区,每个分区约有75,000条记录。 我使用Int64范围作为分区键。 在上面的代码中,“Result.ToList()”大约需要1分钟来执行每个分区。 另一个问题是,实际结果是空的! 在sql server中运行的相同sql返回客户名以“c”结尾的行。 但是,这是重点。 我最关心的是“ReliableDictionary”linq查询的性能。 问候

从Service Fabric WebAPI控制器写入ServiceEventSource

在我的有状态服务中,我可以通过调用以下方法写入ServiceEventSource : ServiceEventSource.Current.ServiceMessage(this.Context, “this is my log message”); 有谁知道如何在我的无状态WebAPI控制器中进行相同的调用? 好像我无法将上下文输入控制器。 我注意到它只在我的OwinCommunicationListener可用。 基本上,我希望能够像这样记录我的控制器: public async Task Get(string id) { ServiceEventSource.Current.ServiceMessage(this.Context, “this is my log message”); //Do something return Ok(100); }

服务结构:服务之间的呼叫被延迟了吗?

我们正在开发由多种不同服务组成的服务结构应用程序,而我们的应用程序工作方式的关键部分是这些服务需要大量调用彼此。 直到最近,当我们增加应用程序的负载并发现它大幅减速时,我们没有遇到任何问题。 在经过多次调查和计时之后,我们发现问题似乎是当我们对一种类型的服务(我们有多个实例)进行大量调用时,这些调用似乎是我们调用服务之间的一些延迟,服务实际上开始处理请求。 我们在微软这里描述的服务之间打电话 更清楚:ServiceA获取对ServiceB的引用,然后调用ServiceB.GetResult(),我们记录在ServiceA中调用此方法的时间,我们在GetResult()中做的第一件事就是记录处理开始的时间。 当没有负载时,只有几毫秒,一旦我们增加了负载,我们发现在这些时间之间有4-5秒的延迟。 这是服务面料的某种限制吗? 我们有多个ServiceB实例,集群上的资源使用基本上没什么,CPU占用大约10%,所有节点上的内存使用率约为1/4,但是服务的吞吐量非常低,因为它在这里等待。 为什么要等? 对于服务一次可以处理的不同呼叫,是否存在某种定义的限制? 我们的沟通有问题吗? 谢谢。

如何查看是否在服务结构下运行

我有时在Visual Studio中本地运行项目是否有更好的方法来检测我是否由SF托管而不是exception。 我可以看到路径或入口组件,但必须有更好的方法。 try { ServiceRuntime.RegisterServiceAsync(“FisConfigUIType”, context = > new WebHost (context, loggerFactory, “ServiceEndpoint”, Startup.serviceName)).GetAwaiter().GetResult(); Thread.Sleep(Timeout.Infinite); } catch (FabricException sfEx) { RunLocal(args, loggerFactory); }

服务结构unit testing和dependency injection

我无法通过调用它的构造函数来测试可靠的服务/ Actor,然后测试它的方法。 var testService = new SomeService(); 抛出NullReferenceException。 那么我可以用部署的服务做什么.. 据我所知,部署的SF Reliable Services / Actors不是标准的.NET类,部署S / A的unit testing可能是一个奇怪的想法。 无论如何,现在我想尝试一下。 例如。 我刚刚部署了一个服务,而不是在测试中我创建了一个Proxy对象并将项添加到Service的输入队列中。 然后我需要声明输入队列计数= 1.如果我刚刚部署了一个服务而没有其他客户端/服务/演员使用它的输入队列,它就可以工作。 但是下次这次测试失败就是问题所在。 我需要让服务停止与其他消费者一起操作,丢弃它的队列而不是测试它。 为此,我可以创建一些TestMode属性和一些方法,如PropareoForTests / TestingCompleted,并在测试之前和之后从测试客户端调用它们。 这样做是不是一个坏主意。 也许有一些unit testingSF的指导方针? 谢谢。 更新: 在研究Service Fabric Web Reference Application示例时,我发现了这个TODO字符串: /// TODO: Temporary property-injection for an IServiceProxyWrapper until constructor injection is available. 这是否意味着SF服务将改善其DI支持? 演员怎么样?

Microsoft Service Fabric主机服务(FabricHostSvc)挂起启动

自2015年11月以来,我一直在使用Microsoft Service Fabric,遇到了很多问题,但现在Service Fabric在我的开发机器上已经完全无法正常运行。 卸载/重新安装没有帮助。 我正在使用1.5预览,并从那以后尝试2.0无济于事。 当我尝试从Visual Studio 2015 Update 1运行Service Fabric应用程序时,问题就出现了(正如我在过去几个月中做过数百次)。 我的机器是蓝屏的(我第一次看到Windows 10的蓝屏)。 重新启动后,我无法通过Visual Studio部署我的Service Fabric应用程序。 PowerShell脚本失败,并显示以下消息: 启动服务FabricHostSvc。 这可能需要几分钟…启动服务:无法启动服务’Microsoft Service Fabric Host Service(FabricHostSvc)’。 我进入SCM并发现“Microsoft Service Fabric Host Service”处于Starting状态。 它停留了一个小时。 我尝试多次停止并启动服务,每次都挂起。 我卸载了Service Fabric(Service Fabric,SDK和Tools for VS)并重新安装了最新版本2.0,它也出现了同样的问题。 重启,同样的问题。 删除了c:\ SfDevCluster文件夹,同样的问题。 根据其他一些文章,我在卸载后寻找任何流浪性能计数器,但没有任何。 我尝试查看注册表,但名称中还有其他Azure组件“Fabric”。 如果我删除它们,我可能会管理我的Azure开发设置的其余部分。 现在……当我再次尝试启动服务时,它确实重新创建了SfDevCluster文件夹并给了我一些日志。 它似乎每分钟创建两个跟踪日志文件,它们具有完全相同的内容。 每次失败时,跟踪的最后一行是: 信息,11176,General.FabricSetup.Main,操作失败,错误0xffffffff 较早的跟踪(SF 1.5)似乎使用常量而不是错误的hex值。 似乎表示无效的论点。 无论这种失败是什么,它似乎是我的困境的原因。 不幸的是,错误完全没有用。 我试图避免重新安装Windows,因为这会耗费一整天的生产力。 任何帮助是极大的赞赏。

升级到SDK 2.3.301后,Service Fabric Actor或Service变为无法访问

从Service Fabric SDK 2.0.135升级到2.3.301之后,我们开始遇到Service Fabric参与者或服务无法在Service Fabric Explorer中显示为健康状态的情况。 一旦处于此状态,通过ActorProxy或ServiceProxy对actor或服务的任何调用将挂起5分钟,最后给出TimeoutException。 一旦处于这种状态,演员或服务就不会自行恢复 – 即使离开一小时。 唯一的解决方案是重置actor或服务所在的节点,重新部署actor或服务(完全相同的EXE),重置整个集群或重新引导所有集群计算机。 在部署或重新部署SF应用程序后,它通常会进入此状态。 在使用Service Fabric的最后一年(从SDK v1.3开始),我们从未遇到过这个问题。 它仅在移至2.3.301之后才开始。 它似乎随机而且不一致。 我们解决方案中的13个SF应用程序中的哪个应用程序也是随机的。 有没有人对我们如何解决这个问题有任何想法? 这似乎是Service Fabric最新版本中的一个错误,但也许我们在最后做错了。 任何帮助表示赞赏。 下面是很多额外的信息,我希望这些信息有助于理解我们在这个问题上面临的问题。 非常感谢 脚步 我真的没有采取措施来始终如一地重现这个问题。 这简直就是我有时观察到的。 我编译然后从Visual Studio重新部署我的SF项目(Debug – > Start Without Debugging) Visual Studio说它成功部署了该项目 Service Fabric Explorer将我的所有服务显示为Healthy,包括Data-Binding 有问题的SF项目有2个参与者,它们是单个EXE的一部分。 Service Fabric Explorer显示在不同节点上运行的每个actor。 Windows任务管理器显示EXE的两个运行副本,这是有意义的,因为有两个节点运行EXE。 同样,我们的QA在使用PowerShell直接部署到Azure后遇到了问题。 (他不从Visual Studio部署。) 回顾一下 Visual Studio表示部署成功 Service Fabric Explorer显示一切都很健康 任务管理器显示EXE的两个运行副本 […]

默认服务描述不能作为升级集EnableDefaultServicesUpgrade的一部分修改为true

我正在尝试通过Visual Studio升级我的服务结构应用程序 我最终不得不使用diff包方法来确保只有我更改的服务才会升级 我通过命令文件删除了不需要的文件 现在我已经走进了另一个错误,由于缺乏细节,这有点令人讨厌 Start-ServiceFabricApplicationUpgrade : Default service descriptions can not be modified as part of upgrade. Modified 2>default service: fabric:/MYAPPLICATION/MYSERVICE. To allow it, set 2>EnableDefaultServicesUpgrade to true. 我到底在哪里放这个? 请注意,这来自Visual Studio 我很少使用Powershell获得任何乐趣 我见过[here] [1]引用了Update-ServiceFabricService CmdLet。 但没有更多关于我需要做什么的信息 我在应用程序清单中试过这个但没有快乐 Parameters> 保罗

Service Fabric包含其他文件

我有一个包含以下内容的Visual Studios解决方案: Service Fabric项目 无国籍服务项目 无状态服务项目使用基于配置的dependency injection,这意味着依赖项与项目本身松散耦合,而不是实际的VS“项目/编译依赖项”。 我想继续使用Visual Studios,但是当我部署这个项目时,它不知道程序集依赖性(因为这些仅在DI配置中定义),因此它不会打包必要的文件并抛出exception尝试执行dependency injection。 ApplicationManifest.xml文件中是否有任何方法或Visual Studios提供的其他许多XML文件之一,我可以指定作为部署的一部分发布到Service Fabric的其他文件(即我的依赖程序集)? 理想情况下,我想将此文件自动生成为自动构建脚本的一部分。