小编off*_*cer的帖子

实现 Firebase 云消息传递时出现 Java.Lang.NoClassDefFoundError

我正在使用 Firebase Cloud Messaging 实现推送通知,为此我在我的 AndroidManifest.xml 文件中添加了此代码

<!--FCM RECEIVER-->
<receiver
  android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
  android:exported="false"/>
<receiver
  android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
  android:exported="true"
  android:permission="com.google.android.c2dm.permission.SEND">
  
  <intent-filter>
    <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
    <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
    <category android:name="${applicationId}"/>
  </intent-filter>    
</receiver>
<!---FCM RECEIVER ENDS HERE-->
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行该应用程序时,它甚至在开始活动之前就抛出了该应用程序

Java.Lang.NoClassDefFoundError: 'Failed resolution of: Lcom/google/android/datatransport/runtime/dagger/internal/Factory;'
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我为此功能安装了两个 NuGet 包:

  1. Xamarin.GooglePlayServices.Base
  2. Xamarin.Firebase.Messaging

我试过了:

  1. 删除 bin 和 obj 文件夹并再次构建解决方案
  2. 将所有相同的家族金块包更新为相同的版本

c# java android-manifest xamarin.android firebase-cloud-messaging

27
推荐指数
2
解决办法
5006
查看次数

从Azure函数中的配置文件加载连接字符串

在我的Azure函数中,我正在使用一个库,它通过ConfigurationManager中的ConnectionString建立与SQL服务器的连接,如下所示:

var cs = System.Configuration.ConfigurationManager.ConnectionStrings["DbConString"].ConnectionString;
DbConnection connection = new SqlConnection(cs);
Run Code Online (Sandbox Code Playgroud)

现在,当我通过应用程序设置在门户中设置连接字符串DbConString时,一切正常.但是对于本地开发,我使用azure-functions-cli,遗憾的是我不知道应该在哪里放置连接字符串以通过ConfigurationManager正确加载它.

我试图将它放在appsettings.json文件中,但没有成功.

编辑:我的appsettings.json目前看起来像这样:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "AzureWebJobsDashboard": "",
    "MyServiceBusReader": "Endpoint=sb://xxxx=",
    "DbConStr1": "data source=(localdb)\\MSSQLLocalDB;initial catalog=MyDb;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework",
    "ConnectionStrings": {
      "DbConStr2": "data source=(localdb)\\MS..." 
    } 
  }
}
Run Code Online (Sandbox Code Playgroud)

但是我无法通过ConfigurationManager访问"DbConStr1".像描述"的ConnectionStrings"中添加"DbConStr2" 这里会导致编译错误.也许是因为我没有使用.NET Core?

Edit2:我搞砸了"ConnectionStrings"的嵌套.它必须与"值"处于相同的嵌套级别:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "AzureWebJobsDashboard": "",
    "MyServiceBusReader": "Endpoint=sb://xxxx="
  },
  "ConnectionStrings": {
    "DbConStr": "data source=(localdb)\\MS..." 
  }
}
Run Code Online (Sandbox Code Playgroud)

c# azure azure-functions

9
推荐指数
3
解决办法
2万
查看次数

带有通配符的 Istio 授权策略

授权策略不支持路径上的任何通配符模式吗?

\n

我有以下端点:

\n
/my-service/docs/active (GET)\n/my-service/docs/<id>/activate/<bool> (PUT)\n
Run Code Online (Sandbox Code Playgroud)\n

第一个将获取所有活动文档,第二个将激活/停用特定文档。\nI\xe2\x80\x99已尝试在授权策略上设置它,但由于 willdcard,它似乎忽略了此策略。

\n
/my-service/docs/active (GET)\n/my-service/docs/<id>/activate/<bool> (PUT)\n
Run Code Online (Sandbox Code Playgroud)\n

除了更新我的所有端点之外,还有什么不同的解决方案吗?

\n

10倍

\n

authorization istio

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

Logback - logback.xml 中的布局和模式

我使用 logback 和 slf4j 来登录 Spring Boot 应用程序。我创建了一个自定义布局类,因为所有日志语句都将包装为 json。我已配置 logback-spring.xml 如下所示以采用自定义布局。有用!

问题是我无法应用该模式。只有布局(或)模式起作用。我想要的是始终记录在日志中,转到布局类,然后在记录之前应用模式。

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${user.home}/logs/sample.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${user.home}/logs/sample_%d{yyyy-MM-dd}.%i.log</fileNamePattern>

        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <!-- how many days to keep the files -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>

    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="com.test.test.payment.core.logging.SampleLogLayout" >
        </layout>
    </encoder>
    *<!-- <encoder>
        <charset>UTF-8</charset>
        <Pattern>{"@timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", "priority": "%p", "application": "payment",
            "class": "%C", "file": "%F:%L", "payload": %m }%n
        </Pattern>
    </encoder>-->*
</appender>
Run Code Online (Sandbox Code Playgroud)

这是SampleLogLayout课程:

public class SampleLogLayout extends LayoutBase<LoggingEvent> {

    @Override
    public String doLayout(LoggingEvent event) {

        String renderedMessage = event.getMessage(); …
Run Code Online (Sandbox Code Playgroud)

java logback spring-boot

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

使用Nginx Ingress只重写特定的路由

我在后端运行了三个服务,并且入口路由的定义如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - myapp.westeurope.cloudapp.azure.com
    secretName: acme-crt-secret
  rules:
  - host: myapp.westeurope.cloudapp.azure.com
    http:
      paths:
      - path: /
        backend:
          serviceName: myapp-mvc
          servicePort: 80
      - path: /api
        backend:
          serviceName: myapp-api
          servicePort: 80
      - path: /identity
        backend:
          serviceName: myapp-identity
          servicePort: 80
Run Code Online (Sandbox Code Playgroud)

问题是myapp-api已经在侦听对的请求/api/v1/myresource。在当前配置下,myapp-api服务仅处理请求myapp.westeurope.cloudapp.azure.com/api/api/v1/myresource(请注意... / api / api / ...)。

是否可以/api通过myapp-api服务将请求提供给服务,但将这些请求重写/为服务而无需创建另一个Ingress?因此,myapp-api应该将请求提供给myapp.westeurope.cloudapp.azure.com/api/v1/myresource

nginx kubernetes kubernetes-ingress nginx-ingress

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

如何更新 Entity Framework Core 中的单个属性

我只需要更新实体的一两个属性。换句话说,我有一个带有 Id、ParentId、Name 和 Description 的实体。

问题是当名称更新时,如果描述已经存在于数据库中,它就会被清除。

这是代码:

internal void Update(ItemInfo itemInfo)
{
    var item = new Item { Id = itemInfo.Id, ParentId = itemInfo.ParentId, Name = itemInfo.Name };
    var entry = this.DbContext.Items.Attach(item);
    if (item.ParentId != null) entry.Property(x => x.ParentId).IsModified = true;
    if (!(String.IsNullOrWhiteSpace(item.Name))) entry.Property(x => x.Name).IsModified = true;
    this.SaveChanges();;
}
Run Code Online (Sandbox Code Playgroud)

我认为由于我将特定属性设置为已修改,因此只会更新该属性。

或者我应该首先从数据库中获取实体,然后只设置属性并保存。我想避免一次保存两次访问数据库。

c# entity-framework-core

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