Web API 已在 .Net 中使用 Windows 身份验证创建。当我在 React APP 中调用 API 时得到 401 Unauthorized。Web API 在具有 Windows 身份验证的浏览器中工作正常。
axios.get('http://.../.../user/Data')
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});```
Run Code Online (Sandbox Code Playgroud) 我是Kafka的新手,我们的团队正在研究服务间通信的模式。
目标
我们有两个服务,P(生产者)和C(消费者)。对于C所需的一组数据,P是真理的源头。C启动时,需要将所有当前数据从P加载到其缓存中,然后订阅更改通知。(换句话说,我们要在服务之间同步数据。)
数据总量相对较低,并且更改很少。短暂的同步延迟是可以接受的(最终一致性)。
我们希望解耦服务,以便P和C不需要彼此了解。
提案
当P启动时,它将所有数据发布到启用了日志压缩的Kafka主题。每个消息都是其ID为键的聚合。
C启动时,它将从主题的开头读取所有消息,并填充其缓存。然后,它继续从其偏移量读取数据,以通知更新。
当P更新其数据时,它将为已更改的聚合发布一条消息。(此消息与原始消息具有相同的架构。)
C收到新消息时,将更新其缓存中的相应数据。
约束条件
我们正在使用Confluent REST代理与Kafka进行通信。
问题
当C启动时,如何知道何时从该主题读取了所有消息,以便可以安全地开始处理?
如果C没有立即注意到P第二秒钟发送的消息,这是可以接受的。如果C在消费一个小时前发送的消息之前开始处理,这是不可接受的。请注意,我们不知道何时更新P的数据。
我们不希望C在消耗每条消息之后不必等待REST代理的轮询间隔。
首先,我开始使用StructureMap,但任何DI框架中的示例都可以.
我有一个班级,
public class GeoData
{
public List<Country> GetCountries()
{
IDbConnection con = new SqlConnection(ConfigurationManager.ConnectionString["GeoDataConnection"])
//Sql stuff to return countries from a database
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的视图,看看这个类实际上是什么样子,但基本上就是这样.
现在,我有了新的要求.我需要能够在类初始化或方法上更改连接字符串.例如
public void Do()
{
var geoData = new GeoData();
if(x)
{
geoData.ConnectionString = ConfigurationManager.ConnectionString["LIVEGeoDataConnection"]);
}
else
{
geoData.ConnectionString = ConfigurationManager.ConnectionString["STAGINGGeoDataConnection"]);
}
geoData.GetCountries();
}
Run Code Online (Sandbox Code Playgroud)
使用依赖注入是否有更好的解决方案?您如何使用您选择的DI框架执行此操作?
我想找到9的数字补码但失败了.
我尝试了1和2的补充方法,但没有效果.
找出N的数字补码的常用方法是什么?
我有一些我想要注册的WCF服务的服务行为; 没有配置.我想我每次都可以通过使用泛型来跳过创建一个BehaviorExtensionElement后代:
public class SimpleBehaviorExtensionElement<TBehavior> : BehaviorExtensionElement
where TBehavior: new()
{
protected override object CreateBehavior()
{
return new TBehavior();
}
public override Type BehaviorType
{
get { return typeof(TBehavior); }
}
}
Run Code Online (Sandbox Code Playgroud)
在Web.config中:
<behaviorExtensions>
<add name="myBehavior2"
type="WcfService1.SimpleBehaviorExtensionElement`1[[WcfService1.MyBehavior,
WcfService1]], WcfService1"/>
</behaviorExtensions>
Run Code Online (Sandbox Code Playgroud)
WcfService1.MyBehavior存在,实现了IServiceBehavior,并且已经过测试.
但是当我在配置文件的行为部分中引用<myBehavior2 />时,我得到:
为system.serviceModel/behavior创建配置节处理程序时发生错误:无法将扩展元素"myBehavior2"添加到此元素.验证扩展是否已在system.serviceModel/extensions/behaviorExtensions的扩展集合中注册.参数名称:element
如果我创建一个非泛型的BehaviorExtensionElement后代,我可以做的一切都有效.但现在它让我烦恼.;)
我正在使用asp.net mvc 3,我一直收到以下错误.
不显眼的客户端验证规则中的验证类型名称必须是唯一的.以下验证类型不止一次出现:数字
我不知道我有这个
@Html.TextBoxFor(x => x.Mark)
Run Code Online (Sandbox Code Playgroud)
//我的viewmodel
[Required(ErrorMessage = "Message")]
[Number(ErrorMessage = "Message")]
public decimal Mark { get; set; }
Run Code Online (Sandbox Code Playgroud)
如果我将它从小数改为字符串,它将不会抱怨.到底是怎么回事?
编辑
我认为正是因为这个 [Number(ErrorMessage = "Message")]注释.我正在使用此库数据注释扩展
似乎并不是说我使用小数.谁知道为什么?
我们错误地允许将.csproj.user文件签入TFS,因此我们可以设置"启动外部程序"默认值.这种方法效果很差,特别是在分支时.
现在我们试图撤消这个.
如果我删除项目的.csproj.user文件,然后尝试设置新的项目调试属性,我得到:
TF14050:无法更改项目$/xxx.csproj.user,因为它已经有一个不兼容的挂起更改.
如果我签入删除并进行更改,TFS会尝试重新添加我的.csproj.user文件.
我们如何为源代码管理中的现有项目解决此问题?
更新:
我认为摧毁它们是最好的选择; 不过,我们最终只是用TFS Power Tools删除了它们.诀窍是首先删除我们用于*.user 的源控制文件类型,即使它已被禁用.现在TFS似乎完全忽略了这些文件.
关于在何处拨打电话的规范答案Database.SetInitializer是Global.asax针对网络项目.我正在寻找另一种选择.
我们正在使用Entity Framework 4.3.1和Code First.我们编写Web服务和WinForms应用程序,并且通常将数据访问代码(例如DbContexts)放在共享库中.
目前,我们的DbContext后代的构造函数如下所示:
public PricingContext(string connectionString)
: base(connectionString)
{
Database.SetInitializer<PricingContext>(null);
}
Run Code Online (Sandbox Code Playgroud)
95%的时间,这是正确的默认值.5%的时间(某些集成测试,绿地开发等)并非如此.
如果我们将该代码移动到我们的服务和应用程序的初始化(或配置)中,则向库中添加新的DbContext涉及Shotgun Surgery.即使库未直接公开上下文,也必须更新所有这些项目.
可选参数是一种可能性:
public PricingContext(string connectionString,
IDatabaseInitializer<PricingContext> databaseInitializer = null)
: base(connectionString)
{
Database.SetInitializer<PricingContext>(databaseInitializer);
}
Run Code Online (Sandbox Code Playgroud)
但是,覆盖默认策略可能涉及将初始化程序传递给多个层.
我们还考虑创建一个基于反射的初始化器,它将所有上下文设置为特定策略.
什么是最佳做法?
我有一个自定义指令,它使用一个属性来指定它修改的另一个控件.
指令定义对象:
{
restrict: 'E',
templateUrl: 'myTemplate.html',
scope: {
targetId: '@'
},
controller: MyController,
controllerAs: 'vm',
bindToController: true
}
Run Code Online (Sandbox Code Playgroud)
指令控制器上的函数修改目标元素的内容(输入字段):
function onSelection (value) {
var $element = $('#' + vm.targetId);
$element.val('calculated stuff');
$element.trigger('input');
}
Run Code Online (Sandbox Code Playgroud)
单元测试(Jasmine/Karma/PhantomJS)当前将元素附加到页面.这有效,但它似乎是一种代码味道.
beforeEach(inject(function($rootScope, $compile) {
var elementHtml = '<my-directive target-id="bar"></my-directive>' +
'<input type="text" id="bar">';
scope = $rootScope.$new();
angularElement = angular.element(elementHtml);
angularElement.appendTo(document.body); // HELP ME KILL THIS!
element = $compile(angularElement)(scope);
scope.$digest();
}));
afterEach(function () {
angularElement.remove(); // HELP ME KILL THIS!
});
Run Code Online (Sandbox Code Playgroud)
我试过重写控制器函数以避免jQuery; 这没有用.
如何修改指令或测试以消除appendTo/remove?
c# ×6
.net ×1
algorithm ×1
angularjs ×1
apache-kafka ×1
asp.net-mvc ×1
axios ×1
csproj-user ×1
double ×1
generics ×1
kafka-rest ×1
reactjs ×1
sql ×1
tfs ×1
tfs2010 ×1
types ×1
unit-testing ×1
wcf ×1