Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure服务结构:使用无状态服务将数据存储到有状态服务(c#编程)_C#_Azure Service Fabric - Fatal编程技术网

Azure服务结构:使用无状态服务将数据存储到有状态服务(c#编程)

Azure服务结构:使用无状态服务将数据存储到有状态服务(c#编程),c#,azure-service-fabric,C#,Azure Service Fabric,目标:希望在无状态服务中创建具有某些实体的产品,并且所创建的产品应存储在有状态服务中(IReliableDictionary) 如果我在有状态服务中添加产品,则该产品将被添加到数据库中(IReliableDictionary)。这是测试和工作 下一个任务,我所做的是在解决方案中添加一个新的服务(stateless)。无状态应创建具有某些实体的产品(Id,Name)。创建的产品应添加到我的数据库中(statefulservice) 问题:我可以创建带有某些实体的产品,但该产品没有添加到我的数据库中

目标:希望在
无状态
服务中创建具有某些实体的产品,并且所创建的产品应存储在
有状态
服务中(
IReliableDictionary

如果我在有状态服务中添加产品,则该产品将被添加到数据库中(
IReliableDictionary
)。这是测试和工作

下一个任务,我所做的是在解决方案中添加一个新的服务(
stateless
)。
无状态
应创建具有某些实体的产品(
Id
Name
)。创建的产品应添加到我的数据库中(
stateful
service)

问题:我可以创建带有某些实体的产品,但该产品没有添加到我的数据库中,因为它要求我在
无状态
服务中创建
IReliableStateManager
的实例,并且
stateManager
始终为
null

如何在
无状态
服务中创建
IReliableStateManager
的实例 因为
IReliableStateManager
是由
stateful
服务继承提供的 等级制度我正在
无状态
服务中创建存储库的实例

//(stateManager is never assigned to and will always have its dafult value null) 
private static IReliableStateManager stateManager; 
private ServiceFabricRepository = new ServiceFabricRepository(stateManager)
我做了一些搜索,发现
stateful
服务用于数据存储(示例接口:
AddProduct
GetProduct
)而
无状态Web Api
用于使用服务远程处理或
Http
公开
有状态
服务的接口,用于服务之间的通信。但是我找不到我的场景的任何例子

对于任何帮助或建议都将非常有用


感谢和问候

您没有在无状态服务中直接使用IReliableStateManager,而是从无状态调用有状态服务,需要保存pass对象

例如: 在无状态服务中创建有状态服务的服务代理并调用其方法:

IProductService = ServiceProxy.Create<IProductService>(new Uri("fabric:/SfSample/ProductService"), new ServicePartitionKey(0));
var newProduct = new Product()
{
    Name = product.Name,
    Id = product.Id
};
await _productService.AddProduct(newProduct);
IProductService=ServiceProxy.Create(新Uri(“结构:/SfSample/ProductService”),新ServicePartitionKey(0));
var newProduct=新产品()
{
Name=product.Name,
Id=产品Id
};
wait_productService.AddProduct(新产品);
和有状态服务:

public class ProductService : StatefulService, IProductService
    {

        public async Task AddProduct(Product product)
        {
            var products = await StateManager.GetOrAddAsync<IReliableDictionary<Guid, Product>>("products");

            using (var tx = StateManager.CreateTransaction())
            {
                await products.AddOrUpdateAsync(tx, product.Id, product, (id, value) => product);

                await tx.CommitAsync();
            }
        }
...........
}
公共类ProductService:StatefulService、IPProductService
{
公共异步任务AddProduct(产品产品)
{
var products=await StateManager.GetOrAddAsync(“产品”);
使用(var tx=StateManager.CreateTransaction())
{
wait products.AddOrUpdateAsync(tx,product.Id,product,(Id,value)=>product);
wait tx.CommitAsync();
}
}
...........
}

无状态服务不是前端web API,因此我需要使用服务远程处理。也无法在无状态服务(专用IPProductService productService)中直接使用IPProductService,因为它表示没有隐式转换。由于这些是独立的服务,因此必须使用服务远程处理进行通信。对于IPProductService,您必须创建如下代理:IPProductService=ServiceProxy.create(新Uri(“结构:/SfSample/ProductService”)、新ServicePartitionKey(0));
public class ProductService : StatefulService, IProductService
    {

        public async Task AddProduct(Product product)
        {
            var products = await StateManager.GetOrAddAsync<IReliableDictionary<Guid, Product>>("products");

            using (var tx = StateManager.CreateTransaction())
            {
                await products.AddOrUpdateAsync(tx, product.Id, product, (id, value) => product);

                await tx.CommitAsync();
            }
        }
...........
}