小编Rob*_*bar的帖子

Windows Azure中的密钥管理

我对如何在Windows Azure中存储密钥(用于数据加密)感到困惑.

根据以下两个链接(#1,#2),建议将密钥/密钥库存储在Windows Azure存储中:

在Windows Azure存储服务中存储您自己的密钥库是保留一些秘密信息的好方法,因为您可以依赖这些数据在多租户环境中是安全的,并由您自己的存储密钥保护.

但是"开发Windows Azure应用程序的安全最佳实践"(#3)建议不要在Windows Azure中存储任何与密钥相关的材料:

此外,开发人员不应将密钥或任何密钥材料上传到Windows Azure存储,无论他们如何谨慎地隐藏它.如果任何计算机或存储服务遭到破坏,可能会导致加密密钥泄露.

在Windows Azure中存储加密密钥的最佳方法是什么?

cryptography azure

15
推荐指数
2
解决办法
4627
查看次数

ASP.NET Core SignalR中的客户端生命周期事件

我目前正在将一个项目从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,startingstateChanged

javascript signalr signalr.client asp.net-core asp.net-core-signalr

13
推荐指数
1
解决办法
1060
查看次数

使用Azure SDK 2.9.6的MSBuild Tools 2017

是的,那里有类似的问题,但它们与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的唯一选择?

msbuild azure visual-studio-2017

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

即使调用方法,Moq验证方法也会失败

我使用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)

.net c# unit-testing moq mocking

6
推荐指数
2
解决办法
4972
查看次数

获取Azure InstanceInput端点端口

我希望我的客户端与特定的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)

azure

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

通过Web API提供静态内容

我目前正在使用在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版本中是否有任何解决方案?

azure azure-storage asp.net-web-api

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

AJAX POST到Web API控制器和CSRF

我基本上需要在我的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)

javascript ajax asp.net-mvc jquery asp.net-web-api

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

取消请求,如果采取长期处理

你好,这可能在c#:

如果我有一个循环说:

int x = 0;
for (int i = 0; i < 1000000; i++) {
  x++;
}
Run Code Online (Sandbox Code Playgroud)

并且需要1秒多的时间才能完成,是否可以终止代码并继续前进?

c#

4
推荐指数
2
解决办法
2345
查看次数

验证SWT令牌REST WCF服务

我目前正在开发一个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":"&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?>&lt;wsse:BinarySecurityToken wsu:Id=&quot;uuid:74ba5667-04ea-4074-9544-aaafb570c648&quot; ValueType=&quot;http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0&quot; EncodingType=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary&quot; xmlns:wsu=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&quot; xmlns:wsse=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&quot;>aHR0cCUzYSUyZiUyZnNjaGVtYXMueG1sc29hcC5vcmclMmZ3cyUyZjIwMDUlMmYwNSUyZmlkZW50aXR5JTJmY2xhaW1zJTJmZW1haWxhZGRyZXNzPXBhdHJpY2suZWNrZXIlNDBnbWFpbC5jb20maHR0cCUzYSUyZiUyZnNjaGVtYXMueG1sc29hcC5vcmclMmZ3cyUyZjIwMDUlMmYwNSUyZmlkZW50aXR5JTJmY2xhaW1zJTJmbmFtZT1QYXRyaWNrK0Vja2VyJmh0dHAlM2ElMmYlMmZzY2hlbWFzLnhtbHNvYXAub3JnJTJmd3MlMmYyMDA1JTJmMDUlMmZpZGVudGl0eSUyZmNsYWltcyUyZm5hbWVpZGVudGlmaWVyPWh0dHBzJTNhJTJmJTJmd3d3Lmdvb2dsZS5jb20lMmZhY2NvdW50cyUyZm84JTJmaWQlM2ZpZCUzZEFJdE9hd2xzM1doNlgwRFJ6d1BsdzU2a1R0WURmLVNNaDZxZFJtQSZodHRwJTNhJTJmJTJmc2NoZW1hcy5taWNyb3NvZnQuY29tJTJmYWNjZXNzY29udHJvbHNlcnZpY2UlMmYyMDEwJTJmMDclMmZjbGFpbXMlMmZpZGVudGl0eXByb3ZpZGVyPUdvb2dsZSZBdWRpZW5jZT1odHRwJTNhJTJmJTJmbG9jYWxob3N0JTNhNzEwMCUyZlNlcnZpY2UlMmZEZWZhdWx0LmFzcHgmRXhwaXJlc09uPTEzMjY5OTk4MjEmSXNzdWVyPWh0dHBzJTNhJTJmJTJmZmhiYXlhenVyZW5zLmFjY2Vzc2NvbnRyb2wud2luZG93cy5uZXQlMmYmSE1BQ1NIQTI1Nj1SUnN3OUJTSlc2ZFJ0MjJyNkNkcjZWZHpyJTJicTF6MHlhV0FMNVdlJTJiJTJmV3owJTNk&lt;/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)

c# azure acs

4
推荐指数
1
解决办法
2314
查看次数

从Azure表存储中删除数百个实体

我和我的同事目前正在为产品实现撤销/重做功能.我们使用命令模式并将每个命令(例如,创建组件'myFancyComponent')保存为TableStorageEntry表'ProductHistory'.PartitionKey在此表中是唯一的产品名称,RowKey是唯一的标识符.

问题是如果产品被删除,它还​​应该删除表存储中的整个历史记录.使用批量删除可能会变得非常复杂,因为有几个限制:最大.100个实体或最多 4 MB(无论什么是较小的).这个问题有什么最佳做法吗?或者是查询所有条目和检查条目大小的唯一解决方案,而不是批量删除正确数量的条目?

我也发现了这个类似的问题,并考虑为每个产品创建一个表.看来这种方法有一些优点:

  • 选择应该更快,因为只会查询一个表
  • 删除很简单,只需删除整个表

我发现的唯一缺点(在'WINDOWS AZURE TABLE' - 白皮书中):

  • 请注意,删除表时,在表被垃圾回收时,无法重新创建相同的表名至少30秒.

如果我创建几百个表,还有其他(性能)问题吗?

azure azure-table-storage

4
推荐指数
1
解决办法
2918
查看次数

在 SVG-Mask 中重复图像

我目前正在生成以下 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的文本将是可见的,但图像将被延长,这不是我想要的。

svg

4
推荐指数
1
解决办法
4849
查看次数

在PdfSharp中更改文本颜色

我目前正在使用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)

pdf pdfsharp

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