所以我将是第一个承认我对WS-Security内部知之甚少的人.我有一个SOAP服务工厂,如下所示.将此服务与内部仅测试.NET客户端一起使用时(通过svcutil.exe +自动生成的WSDL使用自动生成的.cs代理类)一切正常.我可以在第5个"实际"(加密)SOAP请求/响应之前看到前4个安全SOAP请求 - 响应握手对.我一般都了解安全性,但希望我知道有关此特定握手的详细信息 - 我猜他们正在进行密钥交换?
无论如何,部分是因为
我以为我应该通过HTTPS + HTTP基本身份验证进行SOAP交换.所以问题归结为
上面的跟进:如何将服务工厂配置为推荐设置?毋庸置疑,我希望远离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)我正试图通过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) 我们有一个文件夹,里面装满了需要设置为单个 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 文件的数量和名称时,我想添加它们。
我添加了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}正确作为第一条路径 - 我该怎么做?
灵感来自这个问题.我创建了一个小的基准程序来比较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) 我目前正在使用两个对象,如下所示:
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块中以无警告方式使用两个对象的"正确"方法是什么?
我阅读了msgpack-cli快速入门文档.
我还得到了C#(CLI)NuGet包(v0.3).
NuGet包(!!)中没有官方文档中提到的类(例如BoxingPacker,CompiledPacker或ObjectPacker).我假设文档已经成为孤儿.
那么有没有人举例说明如何在C#中对MessagePack进行序列化/反序列化?我正在尝试为对象执行此操作,并且对序列化程序的二进制特性感兴趣.
我正在使用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*A的ByteArray成员基本上都是十六进制为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) 我正在使用SQL Server 2008(基于服务的数据库)开发一个联系人管理器应用程序.大多数联系人都有几封电子邮件或多个电话号码.那么有没有办法在SQL Server中将数组存储为数据类型?或者有没有人可以选择这种方式?
对于那些赶时间,这是不相关的争议Dual_EC_DRBG埋下NIST的SP800-90A内。
关于两个RNG:
Microsoft BCRYPT 层基于他们的 C API。BCryptGenRandom遵循 NIST SP800-90A CTR_DRBG(即使用经批准的分组密码 AES 来创建随机位)。但是,尚不清楚它是否使用硬件随机源作为种子(或种子的一部分)......
Microsoft .NETRNGCryptoServiceProvider是基于 C# 的。查看.NET 源代码(或此处),我看到它最终调用了 C++ 方法CapiNative.GenerateRandomBytes()。C#=>C++ 转换应该有一个 P/Invoke 存根,但我在框架源代码中的任何地方都找不到它。所以我不知道它是如何实际实施的。
有没有人有关于这两个随机数生成器的其他信息?是否使用 HW 随机种子(通过旧英特尔中的二极管噪声或RDRAND最新英特尔中的争议)。
PS:不确定这应该在安全、StackOverflow 或密码学...
c# ×5
.net ×2
protobuf-net ×2
asp.net-mvc ×1
cryptography ×1
dispose ×1
https ×1
idisposable ×1
messagepack ×1
nunit ×1
random ×1
security ×1
soap ×1
unit-testing ×1
using ×1
ws-security ×1
xunit ×1