我对如何在Windows Azure中存储密钥(用于数据加密)感到困惑.
根据以下两个链接(#1,#2),建议将密钥/密钥库存储在Windows Azure存储中:
在Windows Azure存储服务中存储您自己的密钥库是保留一些秘密信息的好方法,因为您可以依赖这些数据在多租户环境中是安全的,并由您自己的存储密钥保护.
但是"开发Windows Azure应用程序的安全最佳实践"(#3)建议不要在Windows Azure中存储任何与密钥相关的材料:
此外,开发人员不应将密钥或任何密钥材料上传到Windows Azure存储,无论他们如何谨慎地隐藏它.如果任何计算机或存储服务遭到破坏,可能会导致加密密钥泄露.
在Windows Azure中存储加密密钥的最佳方法是什么?
我目前正在将一个项目从ASP.NET SignalR 2.2.3(OWIN)升级到ASP.NET Core SignalR 1.0.2(Kestrel).
SignalR 2.2.3支持多个客户双面一生的事件一样reconnecting,connectionSlow,stateChanged,....我们的javascript客户端使用这些事件并显示类似"重新连接"或"连接当前很慢"的内容.
是否存在或将存在ASP.NET Core SignalR中的等价物?到目前为止我只发现了两个终生事件:
let c = new signalR.HubConnectionBuilder().("/signalR");
c.connection.onClose(function(error) {});
c.connection.onReceive(function(data) {});
Run Code Online (Sandbox Code Playgroud)
我也看到了这个问题,但用户只询问了这个onClose事件.
不,我不是在寻找服务器端的终身事件.
好吧,因为根据文档和这个Github问题,没有重新连接(但是?),我对丢失Reconnecting和没有问题Reconnected.可是你知道connectionSlow,starting和stateChanged?
javascript signalr signalr.client asp.net-core asp.net-core-signalr
是的,那里有类似的问题,但它们与VS 2017无关:
我最近从VS 2015升级到VS 2017.在我的本地开发计算机上一切正常,Azure应用程序(使用Azure SDK 2.9.6)构建并启动.
但是在TeamCity服务器上(MS Build Tools 2017 - 工具版本15.0),我收到以下错误:
MSB4019:找不到导入的项目"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\Windows Azure Tools\2.9\Microsoft.WindowsAzure.targets".确认声明中的路径是否正确,以及该文件是否存在于磁盘上.
构建服务器/ MSBuild尝试Microsoft.WindowsAzure.targets在目录中找到:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\Windows Azure Tools\2.9\
但它实际上在目录中:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\[VisualStudioVersion]\MSBuild\Microsoft\VisualStudio\v15.0\Windows Azure Tools\2.9\
[VisualStudioVersion] 可以具有以下值"社区","专业","企业"
是的,我已经安装了构建工具(https://www.visualstudio.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15).
是的,我已经将整个Windows Azure Tools文件夹复制到了BuildTools\MSBuild\Microsoft\VisualStudio\v15.0,但是在我的F#项目中又出现了另一个错误:
MSB4057:项目中不存在目标"GetTargetFrameworkProperties".
似乎新的MS Build Tools 2017无法与Windows Azure一起正常运行.还有解决方法吗?或者是切换回旧版MSBuild的唯一选择?
我使用Moq遇到了一些麻烦.单元测试后会抛出异常,即使将调用相应的方法.
[TestMethod]
public void CreateFinishTest() {
// mock methods
factoryMock.Setup(f => f.LoadPlan("TestPlanDoNotUse")).Returns(testPlan).Verifiable();
factoryMock.Setup(f => f.CreateFinish(It.IsAny<CreateFinishMessage>(), It.IsAny<string>())).Returns(testFinish.Id).Verifiable();
try {
var cfm = new CreateFinishMessage() {
ClientId = 11,
MessageId = 23456,
CustomerId = 6,
FinishName = "MyFinish",
PlanId = "TestPlanDoNotUse"
};
var cmd = sysCfg.Executor.CreateFinish(cfm); // calls LoadPlan with cfm.PlanId and CreateFinish with cfm and cfm.PlanId
sysCfg.Executor.Execute(cmd);
factoryMock.Verify(f => f.LoadPlan("TestPlanDoNotUse"), Times.Exactly(1));
factoryMock.Verify(f => f.CreateFinish(It.IsAny<CreateFinishMessage>(), It.IsAny<string>()), Times.Exactly(1));
} catch (Exception exc) {
Assert.Fail(exc.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
发生此错误:
Expected invocation on the mock exactly …Run Code Online (Sandbox Code Playgroud) 我希望我的客户端与特定的WorkerRole实例进行通信,因此我尝试使用InstanceInput端点.
我的项目基于此问题中提供的示例:Azure InstanceInput端点使用情况
问题是我没有获得实际实例的外部IP地址+端口,在使用时RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint;
我只获取本地端口的内部地址(例如10.xxx:10100).我知道我可以通过DNS查找(xxx.cloudapp.net)获取公共IP地址,但我没有胶水如何为每个实例获取正确的公共端口.
一种可能的解决方案是:获取实例编号(from RoleEnvironment.CurrentRoleInstance.Id)并将此实例编号添加到FixedPortRange最小值(例如10106).这意味着第一个实例将始终具有端口10106,第二个实例始终具有 10107,依此类推.这个解决方案对我来说似乎有些苛刻,因为我不知道Windows Azure如何将实例分配给端口.
是否有更好(正确)的方法来检索每个实例的公共端口?
问题2:是否有关于支持InstanceInput端点的Azure计算模拟器的任何信息?(正如我在评论中已经提到的:似乎Azure Compute Emulator目前不支持InstanceInputEndpoint).
第二种解决方案(更好):
为了获得公共港口,PublicIPEndpoint可以使用该物品(我不知道为什么我首先没有注意到这个属性).
用法:RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].PublicIPEndpoint;
警告:未使用该属性中的IP地址(http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleinstanceendpoint.publicipendpoint.aspx).
第一个解决方案:
正如已经提到的'artfulmethod',REST操作Get Deployment检索有关当前部署的有趣信息.由于我遇到了一些令人烦恼的小问题,我将在这里提供REST客户端的代码(以防其他人遇到类似的问题):
X509Store certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certificateStore.Open(OpenFlags.ReadOnly);
string footPrint = "xxx"; // enter the footprint of the certificate you use to upload the deployment (aka Management Certificate)
X509Certificate2Collection certs =
certificateStore.Certificates.Find(X509FindType.FindByThumbprint, footPrint, false);
if (certs.Count != 1) {
// …Run Code Online (Sandbox Code Playgroud) 我目前正在使用在OWIN/Katana上运行的WebAPI(在Windows Azure辅助角色实例上).客户端(使用HTML,CSS和Javascript的主页构建)通过REST接口与WebAPI交互.
静态/客户端相关文件(如HTML,CSS,Javascript,Images,...)将保存在Windows Azure Blob存储中.
我现在想通过WebAPI/OWIN提供这个静态内容.
第一个解决方案是从blob存储加载文件并将路由映射到控制器,该控制器返回此文件的blob内容HttpResponse(参见此处)
这适用于一个文件,但我index.html包括其他CSS和Javascript文件.所以浏览器开始寻找@ http://[OWIN-Web-Server-URL]/anotherJSfile.js并且当然找不到任何东西,因为没有为此定义路由.我不能/不想为每个文件定义路由,因为客户端应该从Blob存储中获取文件,而不需要绕过Web服务器(1-2索引/启动文件是可以接受的,但是一切其他应该通过blob存储服务).
第二次尝试是使用一些提供"静态内容"的外部库 - 功能,但它们都不起作用并处于alpha状态(参见此处或此处).
第三种并不完全可以接受的解决方案是重定向http://[OWIN-Web-Server-URL]/到index.htmlblob存储上的文件.这样它可能会起作用,但URL总是类似的https://xxx.blob.core.windows.net/jsscripts/index.html,这不是优选的,因为如果blob存储名称(xxx)会改变,那么到站点的每个链接也会中断.
我的问题是:
目前是否有任何通过Web API/OWIN提供静态文件的解决方案?或者即将推出的Web API 2版本中是否有任何解决方案?
我基本上需要在我的Web API控制器中防止跨站点请求伪造,这是MVC应用程序的一部分.我对任何想法持开放态度.此时,我有一个MVC视图,它使用ArcGIS for JavaScript API显示Esri地图.用户在地图上创建路线,并且可以通过AJAX POST保存其穿过的路线和各种功能.视图没有表单.这是因为我POST到服务器的所有数据都在内存中,而且在屏幕上(或在隐藏字段中)不可见.
所以,我在MVC视图中有以下内容来获取防伪令牌:
@functions{
public string GetTokenHeaderValue()
{
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
}
}
Run Code Online (Sandbox Code Playgroud)
我在View中有这个隐藏的输入,但是意识到这很糟糕,因为它既有'form token',也有与AntiForgery.Validation一起使用的cookie令牌:
<input type="hidden" id="antiforgeryToken" value="@GetTokenHeaderValue()" />
Run Code Online (Sandbox Code Playgroud)
然后,在一个单独的JavaScript文件中(不在View中的脚本标记中),我正在对我的Web API Controller进行Http POST.这是我将令牌添加到请求标头的位置:
var headers = {};
headers['RequestVerificationToken'] = $("#antiforgeryToken").val();
// Ajax POST to Web API Controller
$.ajax({
async: true,
url: '/api/RouteData',
type: 'POST',
headers: headers,
data: requestData,
dataType: 'json',
error: function (xhr, statusText, errorThrown) {
console.log('Error saving route data! ' + errorThrown);
}, …Run Code Online (Sandbox Code Playgroud) 你好,这可能在c#:
如果我有一个循环说:
int x = 0;
for (int i = 0; i < 1000000; i++) {
x++;
}
Run Code Online (Sandbox Code Playgroud)
并且需要1秒多的时间才能完成,是否可以终止代码并继续前进?
我目前正在开发一个WPF客户端,它从Windows Azure AppFabric ACS获取SWT令牌.有了这个令牌,我想使用RESTful WCF服务.我使用本教程获取SWT令牌,它完美无缺.在这个MSDN教程的帮助下,我创建了RESTful WCF服务.
问题是令牌可能具有错误的格式,因为令牌验证器无法验证它(IsHMACValid令牌验证器的方法中的错误,swtWithSignatur.Length == 1).
与服务器联系的令牌示例:
{"appliesTo":"http://localhost:7100/Service/Default.aspx","context":null,"created":1326996221,"expires":1326999821,"securityToken":"<?xml version="1.0" encoding="utf-16"?><wsse:BinarySecurityToken wsu:Id="uuid:74ba5667-04ea-4074-9544-aaafb570c648" ValueType="http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">aHR0cCUzYSUyZiUyZnNjaGVtYXMueG1sc29hcC5vcmclMmZ3cyUyZjIwMDUlMmYwNSUyZmlkZW50aXR5JTJmY2xhaW1zJTJmZW1haWxhZGRyZXNzPXBhdHJpY2suZWNrZXIlNDBnbWFpbC5jb20maHR0cCUzYSUyZiUyZnNjaGVtYXMueG1sc29hcC5vcmclMmZ3cyUyZjIwMDUlMmYwNSUyZmlkZW50aXR5JTJmY2xhaW1zJTJmbmFtZT1QYXRyaWNrK0Vja2VyJmh0dHAlM2ElMmYlMmZzY2hlbWFzLnhtbHNvYXAub3JnJTJmd3MlMmYyMDA1JTJmMDUlMmZpZGVudGl0eSUyZmNsYWltcyUyZm5hbWVpZGVudGlmaWVyPWh0dHBzJTNhJTJmJTJmd3d3Lmdvb2dsZS5jb20lMmZhY2NvdW50cyUyZm84JTJmaWQlM2ZpZCUzZEFJdE9hd2xzM1doNlgwRFJ6d1BsdzU2a1R0WURmLVNNaDZxZFJtQSZodHRwJTNhJTJmJTJmc2NoZW1hcy5taWNyb3NvZnQuY29tJTJmYWNjZXNzY29udHJvbHNlcnZpY2UlMmYyMDEwJTJmMDclMmZjbGFpbXMlMmZpZGVudGl0eXByb3ZpZGVyPUdvb2dsZSZBdWRpZW5jZT1odHRwJTNhJTJmJTJmbG9jYWxob3N0JTNhNzEwMCUyZlNlcnZpY2UlMmZEZWZhdWx0LmFzcHgmRXhwaXJlc09uPTEzMjY5OTk4MjEmSXNzdWVyPWh0dHBzJTNhJTJmJTJmZmhiYXlhenVyZW5zLmFjY2Vzc2NvbnRyb2wud2luZG93cy5uZXQlMmYmSE1BQ1NIQTI1Nj1SUnN3OUJTSlc2ZFJ0MjJyNkNkcjZWZHpyJTJicTF6MHlhV0FMNVdlJTJiJTJmV3owJTNk</wsse:BinarySecurityToken>","tokenType":"http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0"}
在Windows Azure管理门户中,我选择SWT了我的依赖方应用程序的令牌格式.根据第一个教程,SWT令牌的格式看起来不错,但令牌验证器不会接受它.
PS:如果有人正在尝试第二个教程(如何:使用ACS部署到Windows Azure的REST WCF服务进行身份验证):我认为步骤3中的第11点存在错误,您必须修改该web.config文件(system/webService部分)不存在).配置应如下所示:
<?xml version="1.0"?>
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="SWTModule" type="SecurityModule.SWTModule, SecurityModule" />
</modules>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我和我的同事目前正在为产品实现撤销/重做功能.我们使用命令模式并将每个命令(例如,创建组件'myFancyComponent')保存为TableStorageEntry表'ProductHistory'.PartitionKey在此表中是唯一的产品名称,RowKey是唯一的标识符.
问题是如果产品被删除,它还应该删除表存储中的整个历史记录.使用批量删除可能会变得非常复杂,因为有几个限制:最大.100个实体或最多 4 MB(无论什么是较小的).这个问题有什么最佳做法吗?或者是查询所有条目和检查条目大小的唯一解决方案,而不是批量删除正确数量的条目?
我也发现了这个类似的问题,并考虑为每个产品创建一个表.看来这种方法有一些优点:
我发现的唯一缺点(在'WINDOWS AZURE TABLE' - 白皮书中):
如果我创建几百个表,还有其他(性能)问题吗?
我目前正在生成以下 SVG:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" version="1.1">
<defs>
<text id="txt1" y="100" font-weight="bold" font-family="Verdana" font-size="100" fill="white">Some Text</text>
<image id="img1" x="0" y="0" width="425" height="319" opacity="1" xlink:href="http://designm.ag/images/0709/wood/71.jpg" />
</defs>
<g id="group1" transform="translate(0 0) rotate(0)" opacity="1">
<defs>
<mask id="mask1" x="0%" y="0%" width="100%" height="100%" maskUnits="objectBoundingBox">
<use x="0" y="0" width="1000" height="400" transform="rotate(0)" opacity="1" xlink:href="#txt1" />
</mask>
</defs>
<g mask="url(#mask1)" opacity="1">
<use x="0" y="0" width="1000" height="400" transform="rotate(0) scale(1)" opacity="1" xlink:href="#img1" />
</g>
</g>
</svg>
Run Code Online (Sandbox Code Playgroud)
(预览)
我已经缩短了 SVG 并且我知道有两个defs-blocks,但这是我目前正在开发的应用程序完成的生成过程的结果。
问题是文本不完全可见,因为图像宽度只有 425px。是否有一种简单的方法(例如属性)来重复用于蒙版的图像?
随着scale大于1的文本将是可见的,但图像将被延长,这不是我想要的。
我目前正在使用PdfSharp创建一个PDF,它主要由文本和一些图像组成.文本元素具有不同的颜色.我的问题是,一旦我使用与我开始使用的颜色不同的颜色,文本在生成的PDF中不可见(例如,我以黑色文本开头,切换到红色文本,红色文本不可见).所有文本元素都在生成的PDF中(我可以选择它们),但红色元素是不可见的.
所以这是代码:
// Create a new PDF document with one page
var document = new PdfDocument();
var page = document.AddPage();
page.Width = 800;
page.Height = 600;
var defaultFont = new XFont("Arial", 12, XFontStyle.Regular, new XPdfFontOptions(PdfFontEmbedding.Always));
var gfx = XGraphics.FromPdfPage(page);
// black text
gfx.DrawString("black", defaultFont, XBrushes.Black, new XRect(x, y, width, height), XStringFormats.Center);
// red text
gfx.DrawString("red", defaultFont, XBrushes.Red, new XRect(x2, y2, width2, height2), XStringFormats.Center);
Run Code Online (Sandbox Code Playgroud)
我已经找到了一个解决方案(重新创建XGraphics对象),但它很安静,因为它需要在每次颜色更改后调用:
// ...
// black text
gfx.DrawString("black", defaultFont, XBrushes.Black, new XRect(x, y, width, height), XStringFormats.Center);
// disposing …Run Code Online (Sandbox Code Playgroud) azure ×6
c# ×3
javascript ×2
.net ×1
acs ×1
ajax ×1
asp.net-core ×1
asp.net-mvc ×1
cryptography ×1
jquery ×1
mocking ×1
moq ×1
msbuild ×1
pdf ×1
pdfsharp ×1
signalr ×1
svg ×1
unit-testing ×1