小编JTe*_*ech的帖子

负载均衡器后面的WCF服务的WSDL生成

的背景:

我在负载均衡器后面的IIS 7.0上托管了一个服务,它在流量通过时解密SSL.

服务所需的安全模式是混合模式,即TransportWithMessageSecurity

为了使服务能够接受HTTP流量,同时允许客户端通过SSL与Load Balancer进行通信,我创建了一个用户定义绑定,它将自定义HttpTransportBindingElement添加到其通道堆栈.

自定义HttpTransportBindingElement依次向框架声明它能够加密和签名消息......因此,当流量通过HTTP进入时,Framework不会抱怨,因为Transport声称它正在签名/加密消息. ..即使不是.

(对于所有相关人员,这已被确定为可接受的安全性,因为消息或者应该通过SSL到达负载均衡器......)

问题:

当我们使用svcutil.exe生成客户端代理时,生成的自动生成的app.config文件包含通过HTTP寻址的服务的端点.这应该通过HTTPS.

此外,<customBinding>节点中的<transport>元素在需要是<httpsTransport>元素时定义为<httpTransport>元素.

我怀疑这是因为使用自定义HttpTransportBindingElement(如上所述),由服务器上的框架生成的WSDL依次使用HTTP地址而不是HTTPS>构建.

自动生成的客户端app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
    <bindings>
        <customBinding>
            <binding name="myBindingEndpoint">
                <!--    WsdlImporter encountered unrecognized policy assertions in ServiceDescription 'http://tempuri.org/':    -->
                <!--    <wsdl:binding name='myBindingEndpoint'>    -->
                <!--        <sp:HttpToken xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">..</sp:HttpToken>    -->
                <security defaultAlgorithmSuite="Default" authenticationMode="CertificateOverTransport"
                    requireDerivedKeys="true" securityHeaderLayout="Strict" includeTimestamp="true"
                    keyEntropyMode="CombinedEntropy" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
                    <localClientSettings cacheCookies="true" detectReplays="false"
                        replayCacheSize="900000" maxClockSkew="00:05:00" maxCookieCachingTime="Infinite"
                        replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00"
                        sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true"
                        timestampValidityDuration="00:05:00" cookieRenewalThresholdPercentage="60" />
                    <localServiceSettings detectReplays="false" issuedCookieLifetime="10:00:00"
                        maxStatefulNegotiations="128" replayCacheSize="900000" maxClockSkew="00:05:00"
                        negotiationTimeout="00:01:00" replayWindow="00:05:00" inactivityTimeout="00:02:00"
                        sessionKeyRenewalInterval="15:00:00" …
Run Code Online (Sandbox Code Playgroud)

ssl wcf load-balancing svcutil.exe

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

Web API/JsonMediaTypeFormatter 接受无效的 JSON 并将空参数传递给操作

我有以下模型:

public class Resource
{
    [DataMember(IsRequired = true)]
    [Required]
    public bool IsPublic { get; set; }

    [DataMember(IsRequired = true)]
    [Required]
    public ResourceKey ResourceKey { get; set; }
}

public class ResourceKey
{
    [StringLength(50, MinimumLength = 1)]
    [Required]
    public string SystemId { get; set; }

    [StringLength(50, MinimumLength = 1)]
    [Required]
    public string SystemDataIdType { get; set; }

    [StringLength(50, MinimumLength = 1)]
    [Required]
    public string SystemEntityType { get; set; }

    [StringLength(50, MinimumLength = 1)]
    [Required]
    public string SystemDataId { get; set; } …
Run Code Online (Sandbox Code Playgroud)

json.net asp.net-web-api

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

为什么DataTables渲染函数被调用3次?

我正在使用具有客户端处理功能的DataTables 1.10.9。

我正在使用“ ajax”选项来检索DataTable的数据。

我在“ render ”函数中放了一个小的console.log(renderCount)。

表中有4,921行。

但是,控制台显示渲染功能总共被调用了14,772次!

(14,772 =行数* 3 + 11)

我相信这会减慢渲染过程。

而且-我设置了' deferRender '选项-因此我以为render函数应该只调用10次,这是默认的页面大小。

这是怎么回事?

除了服务器端处理外,如何改善此表的初始渲染性能?

这是一行数据的示例:

{ 
    Id: 1, 
    Type: "Purchases", 
    LifecycleStatus: "Manual", 
    ReceivedAtLocal: "04/02/2016 20:45:16", 
    ModifiedAtLocal: "04/02/2016 21:45:16", 
    Operator: "a-mjohn", 
    PartNumber: "IXAWGCAUNVJHONP" 
}
Run Code Online (Sandbox Code Playgroud)

这是表定义代码:

    var renderCount = 0;
    transactionTable = $("#tblTransactions").DataTable({
        "searchDelay" : 500,
        "bDestroy": true,
        "ajax": window.getTransactionDataUrl,
        "processing": false,
        "deferRender" : true,
        "columns": [
            {
                'render': function (data, type, full, meta){                        
                    // Other code omitted for brevity
                    renderCount++;
                    console.log(renderCount);
                    return "";
                }, …
Run Code Online (Sandbox Code Playgroud)

jquery datatables

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

为什么将ng-model设置为undefined不会使表单/输入再次有效?

我有以下简单形式,其中type ='email'输入绑定到模型:

<div ng-app>
    <h2>Clearing ng-model</h2>
    <div ng-controller="EmailCtrl">
        <form name="emailForm" ng-submit="addEmail()">
            <input type="email" name="email" ng-model="userEmail" placeholder="email@domain.com">
            <span ng-show="emailForm.email.$invalid && emailForm.email.$dirty">invalid email</span>
            <span ng-show="emailForm.$invalid">form invalid!</span>
        </form>
        <br/>
        <button ng-click="clearViaUndefined()">clear via undefined</button>
        <button ng-click="clearViaNull()">clear via null</button>
        <button ng-click="clearViaEmptyString()">clear via empty string</button>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

假设用户输入了无效的电子邮件,然后单击"取消"按钮...因此需要重置表单.

在"取消"按钮的ng-click处理程序中,如果我将模型的值设置为"undefined",则不会将输入元素的$ valid属性更改回true(也不是表单的形式).

function EmailCtrl($scope) {

    $scope.clearViaUndefined = function () {
        $scope.userEmail = undefined;
    };

    $scope.clearViaNull = function () {
        $scope.userEmail = null;
    };

    $scope.clearViaEmptyString = function () {
        $scope.userEmail = "";
    };
}
Run Code Online (Sandbox Code Playgroud)

如果我将模型的值设置为空字符串""或null,则$ valid属性确实设置为true.

为什么是这样?

我在这里有一个JS小提琴演示了这种行为:

http://jsfiddle.net/U3pVM/12830/

javascript forms validation angularjs angularjs-ng-model

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

如何使用MSBuild'afterbuild'任务编辑.config文件?

我在目标项目中有一个.config,我需要通过MSBuild任务以编程方式添加一行.

Pseduo运营如:

  • 找到目标.config文件
  • 确定新节点的属性值(例如'package'节点的'id'和'version')
  • 在正确的父节点中插入新节点
  • 保存更改

$ TargetProjectDir\Config\packages.config中的.config文件:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ABC" version="1.1.0.4" />
  <package id="XYZ" version="2.0.0.0" />
</packages>
Run Code Online (Sandbox Code Playgroud)

之后需要看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ABC" version="1.1.0.4" />
  <package id="XYZ" version="2.0.0.0" />
  <package id="CarDataWidget" version="3.0.0.0" />
</packages>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经考虑过使用"内联任务","执行"任务和"XmlPoke"任务,但还没有设法让任何一个工作.

这是我对XmlPoke和XmlPeek的尝试:

我使用以下文章作为如何将节点添加到packages.config文件的灵感:http: //weblogs.asp.net/bsimser/appending-nodes-in-xml-files-with-xmlpeek-and-xmlpoke-使用-恶性

  <Target Name="AfterBuild" DependsOnTargets="AddPackage">
  </Target>
  <Target Name="AddPackage">
    <!-- Load existing nodes into a Property -->
    <XmlPeek XmlInputPath="config/packages.config" Query="/packages/package" >
      <Output TaskParameter="Result" PropertyName="Peeked" />
    </XmlPeek>
    <Message Text="From Peek: $(Peeked)"></Message>

    <!-- Load new node into Property -->
    <PropertyGroup> …
Run Code Online (Sandbox Code Playgroud)

msbuild msbuild-task xmlpoke

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

部分类构造函数和事件处理程序注册

我需要为一个由模板生成的类注册一个事件处理程序 - 在EntityFramework中的T4模板.

目前,我们编辑了生成的代码,以在生成的类(模型上下文)的构造函数中注册处理程序.

当前代码:

    public MyAppContext(string connectionString)
        : base(connectionString, ContainerName)
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        // Register the event handler
        this.Connection.StateChange += Connection_StateChange;
    }
Run Code Online (Sandbox Code Playgroud)

问题是,如果将来重新生成代码,那么上面的代码将被破坏,事件处理程序将不再被连接......

代码重新生成从最小的事情自动发生,例如打开EF Designer并在画布上移动表格!因此,我们不要依赖于将自定义代码留在生成的类中.

无论如何我们可以将注册放在一个部分类中,并保持生成的代码不变?

EG是否存在某种事件,一旦调用构造函数,它将始终被触发?

c# partial-classes event-handling

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

lodash:如何做不区分大小写的_.find()

我有一个复杂的数据结构,带有嵌套数组,我需要使用不区分大小写的搜索来查找带有字符串值的元素.

我已经开始使用lodash由于简单的语法来执行嵌套查询 - 它工作得很好,但搜索区分大小写.

我想找到一个"address_components"元素,其"types"值为"route","long_name"值等于一个名为"targetStreet"的参数.

这是我到目前为止的lodash代码:

    var result = _.find(geocodeResult,
        {
            'address_components': [
                {
                    types: ['route'],
                    'long_name': targetStreet
                }
            ]
        });
Run Code Online (Sandbox Code Playgroud)

问题: 如何使"long_name"属性的匹配不区分大小写?

下面是'geocodeResult'数据结构(它实际上是Google地理编码结果对象)的示例.

请注意,此数据结构是动态的... Google会返回最具体的结果,但如果找不到街道的匹配项,那么它就不会返回街道组件,例如"address_components"中的"types"数组具有非确定性值.

    [
  {
    "address_components": [
      {
        "long_name": "V&a Lane",
        "short_name": "V&a Ln",
        "types": [
          "route"
        ]
      },
      {
        "long_name": "Coonawarra",
        "short_name": "Coonawarra",
        "types": [
          "locality",
          "political"
        ]
      },
      {
        "long_name": "Wattle Range Council",
        "short_name": "Wattle Range",
        "types": [
          "administrative_area_level_2",
          "political"
        ]
      },
      {
        "long_name": "South Australia",
        "short_name": "SA",
        "types": [
          "administrative_area_level_1",
          "political"
        ]
      },
      { …
Run Code Online (Sandbox Code Playgroud)

javascript lodash

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

可以Stream.CopyTo(流)损坏数据吗?

的背景:

我有以下WriteFileToStream函数,用于完成一个简单的工作:从文件中获取数据并将其复制到Stream.

我最初使用的是Stream.CopyTo(Stream)方法.但是,经过漫长的调试过程后,我发现这是导致我的处理管道中出现"损坏数据"错误的原因.

概要:

使用Stream.CopyTo(Stream)方法产生65536个字节的数据,并且流不能正确处理.

使用Stream.Write(...)方法可以生成45450个字节的数据,并且流正确处理.

问题:

任何人都可以看到为什么以下使用CopyTo可能导致无关数据被写入流?

请注意:WriteFileToStream中的最终代码取自对此问题的回答:将MemoryStream保存并加载到文件中

public static void WriteFileToStream(string fileName, Stream outputStream)
{
    FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    long fileLength = file.Length;
    byte[] bytes = new byte[fileLength];
    file.Read(bytes, 0, (int)fileLength);
    outputStream.Write(bytes, 0, (int)fileLength);
    file.Close();
    outputStream.Close();

    // This was corrupting the data - adding superflous bytes to the result...somehow.
    //using (FileStream file = File.OpenRead(fileName))
    //{
    //    // 
    //    file.CopyTo(outputStream);
    //}
}
Run Code Online (Sandbox Code Playgroud)

c# filestream

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