标签: service-fabric-stateless

找不到System.Net.Http 4.2.0.0的奇怪问题

我有一个奇怪的问题,这让我发疯...

我有一个简单的类库项目(完整的.NET Framework,4.6.1),其中包含围绕Cosmos DB的功能的包装类.因此,我已将"Microsoft.Azure.DocumentDB"NuGet Package 1.19.1添加到此项目中.除此之外,我引用了"Newtonsoft.Json"NuGet Package 10.0.3,以及一些"Microsoft.Diagnostics.EventFlow.*"NuGet包.

到目前为止,一切都编译没有任何错误.

但只要我点击我的包装类 - 从简单的Service Fabric无状态服务(完整的.NET Framework 4.6.1)中消耗 - 并尝试执行以下代码行:

_docClient = new DocumentClient(new Uri(cosmosDbEndpointUrl), cosmosDbAuthKey);
Run Code Online (Sandbox Code Playgroud)

我在运行时遇到这个奇怪的错误:

发生System.IO.FileNotFoundException HResult = 0x80070002
消息=无法加载文件或程序集'System.Net.Http,Version = 4.2.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.
Source = StackTrace:at Microsoft.Azure.Documents.Client.DocumentClient.Initialize(Uri 1 desiredConsistencyLevel) at Microsoft.Azure.Documents.Client.DocumentClient..ctor(Uri serviceEndpoint, String authKeyOrResourceToken, ConnectionPolicy connectionPolicy, NullableserviceEndpoint ,ConnectionPolicy connectionPolicy,Nullable 1 desiredConsistencyLevel)

内部异常1:FileNotFoundException:无法加载文件或程序集'System.Net.Http,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.

我完全没有线索,为什么根本找不到System.Net.Http程序集 - 我的类库项目中甚至有一个程序集引用到.Net Framework程序集"System.Net.Http 4.0.0.0".

我也不明白的是,有这种奇怪的绑定重定向到4.2.0.0 - 哪一个来自?为了解决这个问题,我尝试将以下重定向添加到Service Fabric Service的app.config(使用类库):

但仍然没有区别,我仍然在运行时得到错误.

有人知道吗?有人见过这样的问题吗?

谢谢和问候,OliverB

.net dotnet-httpclient visual-studio-2017 service-fabric-stateless

79
推荐指数
5
解决办法
4万
查看次数

错误System.BadImageFormatException服务结构

问题

我正在构建服务结构应用程序.当我创建一个项目并运行它工作正常.但是当我在Api控制器中注入一个服务时,它给了我这个错误,我试图解决它,但还没有成功.

错误

System.BadImageFormatException无法加载文件或程序集"dotnet-aspnet-codegenerator-design"或其依赖项之一.尝试加载格式不正确的程序.

图片

在此输入图像描述

我添加了这项服务

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
        {
            return new ServiceInstanceListener[]
            {
                new ServiceInstanceListener(serviceContext =>
                    new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
                    {
                        ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}");

                        return new WebHostBuilder()
                                    .UseKestrel()
                                    .ConfigureServices(
                                        services => services
                                            .AddSingleton<StatelessServiceContext>(serviceContext)
                                            .AddScoped(typeof(ISendMessage), typeof(SendMessage))
                                            )
                                    .UseContentRoot(Directory.GetCurrentDirectory())
                                    .UseStartup<Startup>()
                                    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                                    .UseUrls(url)
                                    .Build();
                    }))
            };
        }
Run Code Online (Sandbox Code Playgroud)

azure azure-service-fabric asp.net-core service-fabric-stateless

8
推荐指数
1
解决办法
501
查看次数

打包SF无状态ASP.NET Core Web应用程序后代码丢失

我创建了一个Service Fabric应用程序,它具有普通的无状态服务和无状态的ASP.NET Core Web应用程序.在不更改任何默认代码的情况下,我尝试部署应用程序.部署期间发生错误:

Register-ServiceFabricApplicationType:
C:\ SfDevCluster\Data\ImageBuilderProxy\AppType\AadMockApplicationType中应用程序的BuildLayout无效.服务
TenantWebServerPkg 缺少代码.

在检查我的包之后,我注意到包中没有包含代码,只有服务清单文件和配置包:

在此输入图像描述

我的Web应用程序服务清单:

<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="TenantWebServerPkg"
                 Version="1.0.0"
                 xmlns="http://schemas.microsoft.com/2011/01/fabric"
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ServiceTypes>
    <!-- This is the name of your ServiceType. 
         This name must match the string used in RegisterServiceType call in Program.cs. -->
    <StatelessServiceType ServiceTypeName="TenantWebServerType" />
  </ServiceTypes>

  <!-- Code package is your service executable. -->
  <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>TenantWebServer.exe</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
      </ExeHost>
    </EntryPoint>
  </CodePackage>

  <!-- Config package is the contents of the Config directoy under PackageRoot that contains an 
       independently-updateable …
Run Code Online (Sandbox Code Playgroud)

c# asp.net azure-service-fabric service-fabric-stateless

7
推荐指数
1
解决办法
719
查看次数

我们如何在服务结构(无状态服务)上执行集成测试?

我想在服务架构中对无状态服务进行集成.请帮我解决这个问题.我创建了像c#web api这样的无状态服务.

c# integration-testing azure-service-fabric service-fabric-stateless

6
推荐指数
1
解决办法
2365
查看次数

订阅Service Fabric集群级别事件

我正在尝试创建一个服务,它将为我的服务结构集群中运行的应用程序更新服务端点的外部列表.(基本上我需要在我的内部F5负载均衡器中复制Azure负载均衡器.)

在上个月的Service Fabric Q&A中,团队向我指出了RegisterServiceNotificationFilterAsync.

我使用此方法创建了无状态服务,并将其部署到我的开发集群.然后我通过运行ASP.NET Core Stateless服务模板创建了一个新服务.

我期望当我部署第二个服务时,断点将在我的第一个服务中出现,表示已添加服务.但是没有破坏点.

我在互联网上发现这种事情的例子很少,所以我在这里要求跳过其他人这样做,并告诉我哪里出错了.

以下是我的服务代码,它试图捕获应用程序更改:

protected override async Task RunAsync(CancellationToken cancellationToken)
{

    var fabricClient = new FabricClient();

    long? filterId = null;


    try
    {
        var filterDescription = new ServiceNotificationFilterDescription
        {
            Name = new Uri("fabric:")
        };
        fabricClient.ServiceManager.ServiceNotificationFilterMatched += ServiceManager_ServiceNotificationFilterMatched;
        filterId = await fabricClient.ServiceManager.RegisterServiceNotificationFilterAsync(filterDescription);


        long iterations = 0;

        while (true)
        {
            cancellationToken.ThrowIfCancellationRequested();

            ServiceEventSource.Current.ServiceMessage(this.Context, "Working-{0}", ++iterations);

            await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
        }
    }
    finally
    {
        if (filterId != null)
            await fabricClient.ServiceManager.UnregisterServiceNotificationFilterAsync(filterId.Value);
    }



}

private void ServiceManager_ServiceNotificationFilterMatched(object sender, EventArgs e) …
Run Code Online (Sandbox Code Playgroud)

azure-service-fabric service-fabric-stateless

6
推荐指数
1
解决办法
381
查看次数

从服务结构上的自托管 owin webapi 中删除服务器标头

我一直在尝试摆脱在我的自托管 webapi2 应用程序上返回“Microsoft-HTTPAPI/2.0”的“服务器”标头,该应用程序作为 azure 服务结构上的无状态服务托管。我尝试过但没有成功的事情:

我尝试实现 IFilter 以从 webapi 服务中删除标头,但调试应用程序表明此时标头不存在可删除的位置。

还尝试替换导致将新值附加到“Microsoft-HTTPAPI/2.0”值的值。

我尝试在 app.config 文件中设置网络服务器标志(有点像将其用作 web.config),但没有成功。

我尝试覆盖 OWIN 管道的 OnSerdingHeaders 事件,但“Server”标头无法删除,它显然是在稍后阶段添加的。

我尝试了在网上找到的有关使用应用程序生成器在代码中清除服务器的所有建议。

我尝试实现一个自定义委托处理程序来清除/覆盖标头,但也没有运气。

我什至尝试篡改调试计算机上的注册表以进行检查,但也没有成功。

我的渗透测试人员坚持要摆脱它。还有别的办法吗?

提前致谢!

header owin asp.net-web-api2 server service-fabric-stateless

5
推荐指数
1
解决办法
812
查看次数

在服务结构应用程序中动态创建服务

这有点描述性,所以请耐心等待。:)

在我尝试构建的应用程序中,产品具有不同的功能。用户可以选择加入功能 A、B、D 但不是 C。我构建这个的方式是,每个不同的功能都是一个服务(无状态,我正在考虑将数据存储在 Azure SQL 中数据库和从每个服务公开 REST API)。将所有服务捆绑在一起是一个 ApplicationType。对于创建的每个客户租户(将其视为一组用户的共享帐户),我正在考虑使用 TenantManagementService 创建注册 ApplicationType 的新具体实例并调用client.ApplicationManager.CreateApplicationAsync()FabricClient实例,以便我可以在我的节点上为该租户运行一个专用的应用程序实例。但是,正如我所提到的,租户可以选择仅针对映射到服务子集的特定功能选择加入。如果租户仅选择我的应用程序的服务 A,则对应于功能 B、C、D 的其余服务实例不应在节点上空闲运行。

我想为每个服务创建参与者,但我创建的服务是无状态的,我希望它们的多个实例在多个节点上积极运行以平衡负载,而不是有状态服务的空闲副本。

与我对应用程序类型所做的类似,即在新租户注册时生成应用程序类型,我可以在租户想要选择加入/退出产品功能时生成/删除服务吗?

这是我尝试过的:InstanceCount在打包应用程序时,我尝试将服务设置为0。在我的ApplicationParametersXML 文件中:

<Parameters>
    <Parameter Name="FeatureAService_InstanceCount" Value="0" />
    <Parameter Name="FeatureBService_InstanceCount" Value="0" />
</Parameters>
Run Code Online (Sandbox Code Playgroud)

但是,Service Fabric Explorer 在从此类应用程序类型实例化应用程序时会出现问题。错误是这样的: 零服务实例计数错误

但另一方面,当一个服务部署在结构上时,它给了我一个专门删除它的选项,所以这个场景应该是有效的。 在此处输入图片说明

欢迎任何建议!

编辑:我的要求类似于这里的 anderso 提到的方法 - /sf/answers/2467384461/,但是,我特别想解决的问题是上传创建一个应用程序实例或更多具有零实例计数的打包服务!

azure azure-service-fabric service-fabric-actor service-fabric-stateless

2
推荐指数
1
解决办法
1025
查看次数

项目的目标是运行时“win7-x64”,但没有为“Microsoft.NETCore.App”包解析任何特定于运行时的包

我正在尝试将无状态微服务应用程序部署到服务结构中,但我一开始部署就收到此错误。

项目面向运行时“win7-x64”,但没有为“Microsoft.NETCore.App”包解析任何特定于运行时的包。.NET Core 可能不支持此运行时。

如何解决这个问题?

msbuild azure-service-fabric asp.net-core service-fabric-stateless visual-studio-2019

0
推荐指数
1
解决办法
841
查看次数