小编Dee*_*101的帖子

SOAP 1.2 over SSL + HTTP基本身份验证还是WS-Security?

所以我将是第一个承认我对WS-Security内部知之甚少的人.我有一个SOAP服务工厂,如下所示.将此服务与内部仅测试.NET客户端一起使用时(通过svcutil.exe +自动生成的WSDL使用自动生成的.cs代理类)一切正常.我可以在第5个"实际"(加密)SOAP请求/响应之前看到前4个安全SOAP请求 - 响应握手对.我一般都了解安全性,但希望我知道有关此特定握手的详细信息 - 我猜他们正在进行密钥交换?

无论如何,部分是因为

  1. 我不知道底层的SOAP安全握手(WS-Security)
  2. 我知道HTTPS和HTTP基本身份验证(并且更喜欢SSL传输的速度与每个消息SOAP加密/签名验证操作的速度)
  3. 我想保护SOAP端点通信,同时保留与非.NET客户端的兼容性

我以为我应该通过HTTPS + HTTP基本身份验证进行SOAP交换.所以问题归结为

  1. 是通过HTTPS + HTTP基本身份验证进行SOAP交换吗?或者罕见的(=互操作噩梦!)憎恶?
  2. 上面的跟进:如何将服务工厂配置为推荐设置?毋庸置疑,我希望远离Windows身份验证,这在互联网环境中毫无意义......

    public class SoapServiceHostFactory : ServiceHostFactory
    {
        private Type serviceInterfaceType;
    
        public SoapServiceHostFactory(Type serviceInterfaceType)
        {
            this.serviceInterfaceType = serviceInterfaceType;
        }
    
        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {
            ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses);
            ServiceMetadataBehavior smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
    
            // Enable metadata
            if (smb == null)
            {
                smb = new ServiceMetadataBehavior();
                host.Description.Behaviors.Add(smb);
            }
            smb.HttpGetEnabled = true;
    
            // Enable debugging for service
            ServiceDebugBehavior sdb = host.Description.Behaviors.Find<ServiceDebugBehavior>();
            if …
    Run Code Online (Sandbox Code Playgroud)

https ws-security soap

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

Windows Azure无法在具有不同端点数的部署之间执行VIP交换

我正试图通过azure门户网站执行VIP交换,我收到错误:

Windows Azure无法在具有不同端点数的部署之间执行VIP交换.

我看得更近了,我看到了端点数的差异(生产中的2个与分期中的3个).

生产:

Input Endpoints
OUR.API:168.62.21.50:80 
OUR.API:168.62.21.50:3389
Run Code Online (Sandbox Code Playgroud)

分期:

Input Endpoints
OUR.API:168.62.22.55:80 
OUR.API:168.62.22.55:3389 
OUR.API:168.62.22.55:8172
Run Code Online (Sandbox Code Playgroud)

端口80是web,3389是远程桌面.到现在为止还挺好.那个额外的港口8172来自哪里?应用程序中的任何内容都不会侦听端口80以外的任何内容.此外,临时和生产区域中的应用程序几乎完全相同 - 因此它必须是框架.缩小范围的任何步骤?

[编辑]另外,我的角色的ServiceDefinition.csdef只定义了一个端点:

 <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
Run Code Online (Sandbox Code Playgroud)

azure-web-roles

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

xunit 以编程方式添加新测试/“[事实]”?

我们有一个文件夹,里面装满了需要设置为单个 URI 的 JSON 文本文件。目前这一切都是用一个 xUnit "[Fact]" 完成的,如下所示

[Fact]
public void TestAllCases()
{
    PileOfTests pot = new PileOfTests();
    pot.RunAll();
}
Run Code Online (Sandbox Code Playgroud)

pot.RunAll() 然后解析文件夹,加载 JSON 文件(比如 50 个文件)。然后每个都针对 URI 进行锤击,以查看每个都返回 HTTP 200(“ok”)。如果有任何失败,我们目前正在通过使用将其打印为失败

System.Console.WriteLine("\n >> FAILED ! << " + testname + "\n");
Run Code Online (Sandbox Code Playgroud)

这确实确保了失败引起了我们的注意,但 xUnit 认为所有测试都失败了(可以理解)。最重要的是,我们不能指定 xunit “在这里,只运行这个特定的测试”。它目前的构建方式要么全有要么全无。

如何以编程方式添加测试用例?当我阅读 *.json 文件的数量和名称时,我想添加它们。

nunit unit-testing xunit

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

如何忽略MVC4 WebAPI配置中的路由?

我添加了elmah的MVC4项目.我的global.asax的Application_Start()有

WebApiConfig.Register(GlobalConfiguration.Configuration); // #1
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);   // #2
Run Code Online (Sandbox Code Playgroud)

#1和#2如下

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional } );
    }
    ...
}

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

模板是相同的,并且路由到控制器的工作完全符合我们的要求(从URI规范的角度来看).问题是在添加WebAPI路由之后添加了忽略路由.因此,MVC4s路由和由Elmah处理的内容(例如/elmah.axd/styles)被WebAPI拦截并且请求失败=>所以我的elmah.axd页面中没有CSS.我尝试在global.asax中翻转#1和#2,但这导致所有WebAPI路由失败 - FAR比不在Elmah中工作的CSS更糟糕!

我基本上需要一些方法来指示WebAPI的路由忽略{resource}.axd/{*pathInfo}正确作为第一条路径 - 我该怎么做?

asp.net-mvc asp.net-web-api asp.net-web-api-routing

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

为什么ProtoBuf在第一次调用时这么慢,但内部循环非常快?

灵感来自这个问题.我创建了一个小的基准程序来比较ProtoBuf,BinaryFormatter和Json.NET.基准测试本身是一个基于控制台的小型控制台,位于https://github.com/sidshetye/SerializersCompare.可以随意添加/改进,添加新的串行器非常简单.无论如何,我的结果是:

        Binary Formatter         ProtoBuf          Json.NET     ServiceStackJson   ServiceStackJSV
 Loop     Size:512 bytes    Size:99 bytes    Size:205 bytes      Size:205 bytes     Size:181 bytes
    1         16.1242 ms      151.6354 ms       277.2085 ms         129.8321 ms        146.3547 ms
    2          0.0673 ms        0.0349 ms         0.0727 ms           0.0343 ms          0.0370 ms
    4          0.0292 ms        0.0085 ms         0.0303 ms           0.0145 ms          0.0148 ms
    8          0.0255 ms        0.0069 ms         0.0017 ms           0.0216 ms          0.0129 ms
   16          0.0011 ms        0.0064 ms         0.0282 ms           0.0114 ms          0.0120 ms
   32          0.0164 ms …
Run Code Online (Sandbox Code Playgroud)

protocol-buffers protobuf-net

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

同一个使用块中的多个变量

我目前正在使用两个对象,如下所示:

using (var ms = new MemoryStream())
using (var bw = new BinaryWriter(ms))
{
    // work with ms and bw, both referenced here
}
Run Code Online (Sandbox Code Playgroud)

它工作"很好",实际上也是一个答案.但是,当我运行VS2012的代码分析工具时,我得到一个警告:

CA2202  Do not dispose objects multiple times   
Object 'ms' can be disposed more than once in method '<my method name>'. 
To avoid generating a System.ObjectDisposedException you should not 
call Dispose more than one time on an object.
Run Code Online (Sandbox Code Playgroud)

这让我相信可能有另一种方法来处理这种情况,但我不知道它是什么.

有谁知道在一个using块中以无警告方式使用两个对象的"正确"方法是什么?

c# dispose idisposable using using-statement

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

如何在C#中使用MessagePack?

我阅读了msgpack-cli快速入门文档.

我还得到了C#(CLI)NuGet包(v0.3).

NuGet包(!!)中没有官方文档中提到的类(例如BoxingPacker,CompiledPackerObjectPacker).我假设文档已经成为孤儿.

那么有没有人举例说明如何在C#中对MessagePack进行序列化/反序列化?我正在尝试为对象执行此操作,并且对序列化程序的二进制特性感兴趣.

.net c# serialization messagepack

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

ProtoBuf在反序列化期间破坏了字节数组(添加了额外的0)

我正在使用ProtoBuf.NET来序列化/反序列化某些类.我发现在反序列化时,我得到一个损坏的字节[](额外的0).在您提出之前,是的,我需要ProtoBuf API 的*WithLengthPrefix()版本,因为ProtoBuf部分位于自定义流的开头:)

无论如何,我明白了

Original object is (JSON depiction):
{"ByteArray":"M+B6q+PXNuF8P5hl","ByteArray2":"DmErxVQ2y87IypSRcfxcWA==","K":2,"V
":1.0}

Protobuf: Raw Hex (42 bytes):
29-2A-20-0A-0C-33-E0-7A-AB-E3-D7-36-E1-7C-3F-98-65-12-10-0E-61-2B-C5-54-36-CB-CE
-C8-CA-94-91-71-FC-5C-58-08-02-15-00-00-80-3F

Regenerated object is (JSON depiction):
{"ByteArray":"AAAAAAAAAAAAAAAAM+B6q+PXNuF8P5hl","ByteArray2":"DmErxVQ2y87IypSRcf
xcWA==","K":2,"V":1.0}
Run Code Online (Sandbox Code Playgroud)

额外AAA*AByteArray成员基本上都是十六进制为0x00的用base64.

应用程序逻辑类似于

static void Main(string[] args)
{
    var parent = new Parent();
    parent.Init();

    Console.WriteLine("\nOriginal object is (JSON depiction):");
    Console.WriteLine(JsonConvert.SerializeObject(parent));

    using (var ms = new MemoryStream())
    {
        Serializer.SerializeWithLengthPrefix(ms, parent, PrefixStyle.Base128);
        byte[] bytes2 = ms.ToArray();
        var hex2 = BitConverter.ToString(bytes2);
        Console.WriteLine("\nProtobuf: Hex ({0} bytes):\n{1}", bytes2.Length, hex2);

        ms.Seek(0, SeekOrigin.Begin);
        var backFirst = Serializer.DeserializeWithLengthPrefix<Parent>(ms,PrefixStyle.Base128); …
Run Code Online (Sandbox Code Playgroud)

c# protocol-buffers protobuf-net

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

在SQL Server 2008中存储数组

我正在使用SQL Server 2008(基于服务的数据库)开发一个联系人管理器应用程序.大多数联系人都有几封电子邮件或多个电话号码.那么有没有办法在SQL Server中将数组存储为数据类型?或者有没有人可以选择这种方式?

c# sql-server-2008

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

随机数生成器安全性:BCryptGenRandom 与 RNGCryptoServiceProvider

对于那些赶时间,这是相关的争议Dual_EC_DRBG埋下NIST的SP800-90A内。

关于两个RNG:

  1. Microsoft BCRYPT 层基于他们的 C API。BCryptGenRandom遵循 NIST SP800-90A CTR_DRBG(即使用经批准的分组密码 AES 来创建随机位)。但是,尚不清楚它是否使用硬件随机源作为种子(或种子的一部分)......

  2. Microsoft .NETRNGCryptoServiceProvider是基于 C# 的。查看.NET 源代码(或此处),我看到它最终调用了 C++ 方法CapiNative.GenerateRandomBytes()。C#=>C++ 转换应该有一个 P/Invoke 存根,但我在框架源代码中的任何地方都找不到它。所以我不知道它是如何实际实施的。

有没有人有关于这两个随机数生成器的其他信息?是否使用 HW 随机种子(通过旧英特尔中的二极管噪声或RDRAND最新英特尔中的争议)。

PS:不确定这应该在安全、StackOverflow 或密码学...

.net c# security random cryptography

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