我的VS解决方案中有几个项目.每当我将"System.Net.Http"NuGet包添加到它显示为4.2.0.0版本的包时.然后我也这样做并添加相同的NuGet包,然而,另一个说版本.4.1.1.2
然后我收到警告:
发现System.Net.Http之间存在冲突
EDIT1:
Gathering dependency information took 1.7 sec
Attempting to resolve dependencies for package 'System.Net.Http.4.3.3' with DependencyBehavior 'Lowest'
Resolving dependency information took 0 ms
Resolving actions to install package 'System.Net.Http.4.3.3'
Resolved actions to install package 'System.Net.Http.4.3.3'
Retrieving package 'System.Net.Http 4.3.3' from 'nuget.org'.
Adding package 'System.Net.Http.4.3.3' to folder 'C:\...Service\packages'
Added package 'System.Net.Http.4.3.3' to folder 'C:\...Service\packages'
Added package 'System.Net.Http.4.3.3' to 'packages.config'
Successfully installed 'System.Net.Http 4.3.3' to ....Service
Executing nuget actions took 2.05 sec
Time Elapsed: 00:00:03.8937113
Run Code Online (Sandbox Code Playgroud)
请注意安装了正确的版本,但是=> Props =>版本说4.1.1.2
从Service Fabric SDK 2.0.135升级到2.3.301之后,我们开始遇到Service Fabric actor或服务无法在Service Fabric Explorer中显示为健康状态的情况.一旦处于此状态,通过ActorProxy或ServiceProxy对actor或服务的任何调用将挂起5分钟,最后给出TimeoutException.一旦处于这种状态,演员或服务就不会自行恢复 - 即使离开一小时.唯一的解决方案是重置actor或服务所在的节点,重新部署actor或服务(完全相同的EXE),重置整个集群或重新引导所有集群计算机.
在部署或重新部署SF应用程序后,它通常会进入此状态.
在使用Service Fabric的最后一年(从SDK v1.3开始),我们从未遇到过这个问题.它仅在移至2.3.301之后才开始.
它似乎随机而且不一致.我们解决方案中的13个SF应用程序中的哪个应用程序也是随机的.
有没有人对我们如何解决这个问题有任何想法?这似乎是Service Fabric最新版本中的一个错误,但也许我们在最后做错了.
任何帮助表示赞赏.
下面是很多额外的信息,我希望这些信息有助于理解我们在这个问题上面临的问题.
非常感谢
脚步
我真的没有采取措施来始终如一地重现这个问题.这就是我有时观察到的.
同样,我们的QA在使用PowerShell直接部署到Azure后遇到了问题.(他不从Visual Studio部署.)
回顾一下
当我看到失败
我有一个SF服务使用ServiceProxy或ActorProxy类调用另一个SF服务.我们在整个解决方案中实现了这一目标,结合了13种不同的应用程序和约25种不同的服务和参与者.自从我们于2015年11月开始使用Service Fabric SDK v1.3以来,它已经成功运行.
现在,在升级到2.3.301之后,我们定期出现一个随机Actor或Service进入一种状态,当从ServiceProxy或ActorProxy调用时,它无法响应对方法的调用.挂起5分钟后,我们收到System.Timeout异常,并显示以下消息:
如果在服务繁忙或其长时间运行操作时丢弃消息并且花费的时间超过配置的操作超时,则会发生这种情况.
请注意,该服务不忙,也不执行长时间运行.作为演员,该服务根本不进行任何正在进行的操作.它只是暴露了其他服务可以使用的公共方法.它从第一次调用失败.
实际上,跟踪向我们表明,即使是actor中方法的第一行也永远不会被调用.就像Service Fabric通信基础设施无法传递消息一样.
什么时候开始
在过去的12个月里,我们从未见过这个问题.
现在,自上周升级Service Fabric以来,我们经常在各种条件下看到这个问题.
我们升级到Service Fabric SDK 2.3.301.9590和Service Fabric 5.3.301.9590.
起初,团队中的每个开发人员都独立地遇到了这个问题,每个人都认为这只是我们机器的一个短暂问题.Service Fabric确实存在一些问题,所以我们接受这个并继续前进.但后来我们开始互相抱怨,意识到我们都在看到它.即便是我们的QA也会在我们的环境中看到它即将投入生产.
同样,这只是在我们上周升级到Service Fabric的最新版本时才开始的.
以前,我们运行的是Service Fabric SDK 2.0.135.
我们通过安装SDK v 2.3.301升级了我们的代码库,打开了我们的每个解决方案并允许Visual …
c# azure visual-studio-2015 azure-service-fabric service-fabric-stateful
尝试在服务结构群集中运行我的服务时,"输出"窗口会显示
"应用程序URL未设置或不是HTTP/HTTPS URL,因此浏览器不会打开到应用程序".
我错过了配置步骤吗?
我在Visual Studio 15.4上运行的.Net Standard Asp.net Core 2.0中有一个无状态服务调用的状态服务.我无法使Service Remoting V2工作.
旧的代码,对V1的工作状态服务是无效的了
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
return new List<ServiceReplicaListener>()
{
new ServiceReplicaListener((context) =>this.CreateServiceRemotingListener(context))
};
Run Code Online (Sandbox Code Playgroud)
我尝试按照本教程,但示例是针对无状态的.
我试图改变这里的代码没有成功.
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
return new List<ServiceReplicaListener>()
{
new ServiceReplicaListener((c) =>new FabricTransportServiceRemotingListener(c, this))
};
}
Run Code Online (Sandbox Code Playgroud)
此外,没有关于如何或在何处使用本教程中此代码的说明
var proxyFactory = new ServiceProxyFactory((c) =>
{
return new FabricTransportServiceRemotingClientFactory();
});
Run Code Online (Sandbox Code Playgroud)
我被卡住了,有人能告诉我如何让它发挥作用吗?
我有一个Service Fabric应用程序,它具有无状态Web api和带有两个分区的有状态服务.无状态web api定义了一个web api控制器,用于ServiceProxy.Create获取有状态服务的远程代理.远程调用将消息放入可靠的队列中.
有状态服务将每隔X分钟从队列中出列消息.
我正在查看Service Fabric资源管理器,过去几天我的应用程序一直处于错误状态.当我深入了解详细信息时,有状态服务会出现以下错误:
错误事件:SourceId ='System.FM',Property ='State'.分区是法定人数损失.
看看资源管理器,我看到我的主副本启动并运行,它看起来像一个ActiveSecondary,但其他两个副本显示IdleSecondary,它们继续进入Standby/In Build状态.我无法弄清楚为什么会这样.
我的其他辅助人员未能进入ActiveSecondary状态导致法定人数减少的原因是什么?
编辑04/06/18 =>更新了上次状态的问题
所以我有这个工作.Net 4.6状态服务,目前在我部署在Azure上的Windows Service Fabric集群上运行.
从2017年9月开始,我应该可以转到Linux:https://blogs.msdn.microsoft.com/azureservicefabric/2017/09/25/service-fabric-6-0-release/
所以我试图在Linux上部署它,这样我就可以节省成本.
首先,我将所有代码从.Net 4.6迁移到.Net Core 2.0.现在我可以毫无问题地编译我的二进制文件.我基本上创建了新的.Net Core项目,然后将我的所有源代码从.Net 4.6项目移动到新的.Net Core项目.
然后我更新了我的Service Fabric应用程序.我从我的sfproj中删除了以前的SF服务,然后我添加了新的.Net Core服务.
看起来有一个警告(虽然输出窗口上没有任何内容),但无论如何,如果我尝试通过Service Fabric Tools 2.0(beta)提供的模板使用.Net core 2.0创建一个新的空Statful服务,它就在这里:
所以我会忍受它.
runtimeIdentifier.在我的Windows机器上本地运行我的SF群集很好.
runtimeIdentifier.我还更改了ServiceManifest.xml文件以定位与linux兼容的二进制文件:
<!-- Code package is your service executable. -->
<CodePackage Name="Code" Version="1.9.6">
<EntryPoint>
<ExeHost>
<Program>entryPoint.sh</Program>
</ExeHost>
</EntryPoint>
</CodePackage>
Run Code Online (Sandbox Code Playgroud)
entryPoint.sh 是最终执行的基本脚本:
dotnet $DIR/MyService.dll
Run Code Online (Sandbox Code Playgroud)
错误事件:SourceId ='System.Hosting',Property ='CodePackageActivation:Code:EntryPoint'.CodePackage激活期间出错.服务主机以退出代码终止:134
看起来我的二进制文件在启动时崩溃了.所以这是我的问题:
编辑:查看LinuxsyslogVer2v0表,我收到以下错误:
starthost.sh [100041]:未处理的异常:System.IO.FileLoadException:无法加载文件或程序集'System.Threading.Thread,Version = 4.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
我发现下面的错误报告: …
我有一个有状态服务,根据相应的文档实现了备份逻辑
就像这样:
protected override async Task RunAsync(CancellationToken cancellationToken)
{
// ...
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
BackupDescription myBackupDescription = new BackupDescription(BackupOption.Full, this.BackupCallbackAsync);
await this.BackupAsync(myBackupDescription);
// ...
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
private async Task<bool> BackupCallbackAsync(BackupInfo backupInfo, CancellationToken cancellationToken)
{
var backupId = Guid.NewGuid();
// backup files copied to external storage here ...
return true;
}
Run Code Online (Sandbox Code Playgroud)
文档只建议了一种恢复备份的OnDataLossAsync方法-方法。但是我不能激发对这个方法的调用。
所以,问题是:如果数据完全丢失,我如何从备份中恢复服务状态?
例如,所有 Service Fabric 集群节点都已被销毁。我唯一拥有的是我的备份。重新部署后我应该怎么做才能恢复我的服务状态?
我检查Data和Log服务织物集群管理器的目录,但数据格式似乎是比较不同的备份。
我试图理解为什么我们的演员服务使用的磁盘空间比预期的多。我们的服务目前包含分布在 10 个分区上的大约 80,000 个参与者。每个参与者存储大约 150Kb 的状态。
查看我们集群中的一个(10 个)节点,我希望看到:
R_S_。这些副本 ID 与 Service Fabric Explorer 中“应用程序”节点下列出的任何值都不匹配。ActorStateStore,其大小为 5.66Gb 我试图理解的另一件事如下:
所以我的问题是:
azure-service-fabric service-fabric-stateful service-fabric-actor
我正在寻找替换ASF中RPC的默认序列化器。这涉及实现一些接口,其中一个接口在通过RPC进行通信的服务之间传递
public interface IServiceRemotingResponseMessageBody
{
void Set(object response);
object Get(Type paramType);
}
Run Code Online (Sandbox Code Playgroud)
由于实现需要可序列化,因此显而易见的ProtoBuf实现类似于
[ProtoContract]
public class ProtoBufRemotingResponseBody : IServiceRemotingResponseMessageBody
{
[ProtoMember(1)]
public object Value { get; set; }
public void Set(object response)
{
Value = response;
}
public object Get(Type paramType)
{
return Value;
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这失败了
没有为类型定义序列化器:System.Object
这里有解决方法吗?System.Object的没有合同,但开箱即用的DataContract串行器可以,如可以MessagePack 这里,但这些都不是系统化它可以创建时的版本头痛可靠的集合。我试过使用常见的基本类型,但Value可以是IEnumerable<T>或T等。
有人可以帮忙吗?谢谢,KH
protobuf-net protobuf-csharp-port azure-service-fabric service-fabric-stateful
我在Service Fabric 6上有一个Asp.net Core 2.0无状态服务和一个Asp.net Core 2.0状态服务,有10个分区计数.
我按照本教程
https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-add-a-web-frontend
我遵循所有步骤,除了我在Visual Studio中使用模板,其中CreateServiceReplicaListeners使用KestrelCommunicationListener
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
return new ServiceReplicaListener[]
{
new ServiceReplicaListener(serviceContext =>
new KestrelCommunicationListener(serviceContext, (url, listener) =>
{
return new WebHostBuilder()
.UseKestrel()
.ConfigureServices(
services => services
.AddSingleton<StatefulServiceContext>(serviceContext)
.AddSingleton<IReliableStateManager>(this.StateManager))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
.UseUrls(url)
.Build();
}))
};
}
Run Code Online (Sandbox Code Playgroud)
当我使用以下代码在Asp.net Core 2.0无状态服务中调用我的服务时:
var service = ServiceProxy.Create<IStorageService>(new Uri("fabric:/MyCluster/Storage"), new ServicePartitionKey(Fnv1aHashCode.Get64bitHashCode(User.Id)));
await service.MyMethod();
Run Code Online (Sandbox Code Playgroud)
调用"MyMethod"时会出现异常
客户端试图连接到无效的地址的http://本地主机:58352 /等 ..
异常中存在的URL存在于Service Fabric Explorer中,并且Port和PartitionKey是正确的.ServiceManifest中没有设置端点,因为有状态服务基本上只是添加了IService接口和MyMethod方法的模板,如上所述.
我在这里缺少什么?Asp.net Core 2.0的文档不是最新的.
我试图不使用分区,设置 ServicePartitionKey(0)但结果相同.
我不知道该怎么办.