小编Dam*_*ell的帖子

如何强制net.tcp mex端点(mexTcpBinding)参与端口共享?

我有一个WCF服务,它作为Windows服务托管.我们想在同一地址启用一个mex端点(但后缀为'/ mex').我一直在尝试使用以下配置执行此操作(失败):

<system.serviceModel>

  <services>
    <service
      name="MyCompany.MyService"
      behaviorConfiguration="defaultServiceBehavior">

      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost"/>
        </baseAddresses>
      </host>

      <endpoint
        address="MyService"
        binding="netTcpBinding"
        contract="MyCompany.IMyService"
        bindingConfiguration="netTcpBindingConfig"
        />

      <endpoint
        address="MyService/mex"
        binding="mexTcpBinding"
        contract="IMetadataExchange"
        />

    </service>
  </services>

  <behaviors>
    <serviceBehaviors>
      <behavior name="defaultServiceBehavior">
        <serviceMetadata />
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <bindings>
    <netTcpBinding>
      <binding name="netTcpBindingConfig" portSharingEnabled="true" />
    </netTcpBinding>
  </bindings>

</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

当它运行时,服务主机抛出一个AddressAlreadyInUseException抱怨"IP端点上已经有一个监听器0.0.0.0:808".这实际上对我有意义,因为端口共享服务已打开该端口,以便为MyService请求在此计算机上共享该端口的任何其他服务提供端点服务.

所以似乎mex端点想要对端口808进行exlusive访问.我可以通过调整mex端点来解决这个问题:

<endpoint
  address="net.tcp://localhost:818/MyService/mex"
  binding="mexTcpBinding"
  contract="IMetadataExchange"
  />
Run Code Online (Sandbox Code Playgroud)

这意味着mex端点现在拥有自己的专用端口.这方面的缺点是,任何其他想要公开mex端点的服务也需要一个唯一的端口用于其mex端点.这使得在查找mex端点时非常难以预测.

有没有办法强制mex端点参与端口共享?

wcf net.tcp mex-bindings

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

如何测试PowerShell中是否存在脚本范围的变量?

是否有可能在PowerShell中测试脚本范围变量的存在?

我一直在使用PowerShell社区扩展(PSCX),但我注意到如果在Set-PSDebug -Strict设置时导入模块,则会产生错误:

The variable '$SCRIPT:helpCache' cannot be retrieved because it has not been set.
At C:\Users\...\Modules\Pscx\Modules\GetHelp\Pscx.GetHelp.psm1:5 char:24
Run Code Online (Sandbox Code Playgroud)

在研究如何解决这个问题时,我在Pscx.GetHelp.psm1中找到了这段代码:

#requires -version 2.0

param([string[]]$PreCacheList)

if ((!$SCRIPT:helpCache) -or $RefreshCache) {
    $SCRIPT:helpCache = @{}
}
Run Code Online (Sandbox Code Playgroud)

这是非常简单的代码; 如果缓存不存在或需要刷新,请创建一个新的空缓存.问题是调用$SCRIPT:helpCachewhile Set-PSDebug -Strict有效会导致错误,因为尚未定义变量.

理想情况下,我们可以使用Test-Variablecmdlet,但这样的东西不存在!我考虑过查看variable:提供程序,但我不知道如何确定变量的范围.

所以我的问题是:如何Set-PSDebug -Strict在有效的情况下测试变量的存在,而不会导致错误?

powershell

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

挑战:更好的方式来讨论或部分应用C#4的弦乐.加入

背景

我最近读到.NET 4的System.String类有一个新的Join方法重载.这个新的重载采用了一个分隔符,IEnumerable<T>它允许将任意集合连接成一个字符串,而无需转换为中间字符串数组.

凉!这意味着我现在可以这样做:

var evenNums = Enumerable.Range(1, 100)
    .Where(i => i%2 == 0);
var list = string.Join(",",evenNums);
Run Code Online (Sandbox Code Playgroud)

......而不是这个:

var evenNums = Enumerable.Range(1, 100)
    .Where(i => i%2 == 0)
    .Select(i => i.ToString())
    .ToArray();
var list = string.Join(",", evenNums);
Run Code Online (Sandbox Code Playgroud)

...因此节省了将每个项目转换为字符串,然后分配数组.

问题

但是,作为一般编程功能样式的粉丝,特别是C#中的方法链接,我宁愿能够写出这样的东西:

var list = Enumerable.Range(1, 100)
    .Where(i => i%2 == 0)
    .string.Join(",");
Run Code Online (Sandbox Code Playgroud)

这不是合法的C#.是的,我可以这样做Enumerable.Aggregate,是的,我可以使用我自己的Join扩展方法实现它,但是这些方法难以阅读/效率低下并感觉像是一个警察(分别),所以我想尝试做它是一种不同的方式.我到目前为止最接近的是这样的:

var list = Enumerable.Range(1, 100)
    .Where(i => i%2 == 0)
    .ApplyTo(
        Functional.Curry<string, IEnumerable<object>, string>
            (string.Join)(",")
    );
Run Code Online (Sandbox Code Playgroud)

...使用以下扩展方法:

public …
Run Code Online (Sandbox Code Playgroud)

c# linq functional-programming currying

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

学习Vim:消除单词之间空间的最佳方法

我是Windows平台上经验丰富的开发人员,我正在尝试自学如何使用Vim.我对正则表达式非常了解并理解如何使用Vim的原理.但是,我有一个特定的问题,虽然我有一个解决方案,但感觉好像应该有一个更好的解决方案.

我有一个文件,其中包含类似于以下内容的行:

CODE<tab><tab>Lorem ipsum dolor sit amet
Run Code Online (Sandbox Code Playgroud)

在和之间可能有可变数量的<tab><space>字符.假设光标在正常模式下超过'C' ,我想要做的是找到一个组合键,它将产生以下输出,并将光标留在'E' 和'L'之间.在插入模式下.CODELoremCODECODELorem

CODELorem ipsum dolor sit amet
Run Code Online (Sandbox Code Playgroud)

我的解决方案是使用以下密钥序列:

w d ? \ s \ + <return>

这样可行,但在删除它之前,通过我要删除的东西感觉不合逻辑.我觉得我应该移到最后CODE并删除前进.我意识到这可能只是一个我不知道的Vim成语.我也完全错过了一个关键的Vim知识.

实现目标的最佳方法是什么?

vim command keyboard-shortcuts

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

如何在VBScript中使用最小的分隔符和时区格式化日期时间?

我在C#中有以下代码:

DateTime dt = GetDateTime();
string formatted = dt.ToString("yyyyMMddTHHmmsszz");
Run Code Online (Sandbox Code Playgroud)

以下列格式返回日期:

20100806T112917+01
Run Code Online (Sandbox Code Playgroud)

我希望能够在VBScript中获得相同的结果(对于传统的ASP应用程序).我获取UTC偏移信息或将时间转换为UTC尤为重要.

我怎么做?

vbscript timezone datetime datetime-format asp-classic

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

如何有效地检索所有私有MSMQ队列的名称?

如何在不使用?的情况下检索本地计算机上所有私有MSMQ队列的名称System.Messaging.MessageQueue.GetPrivateQueuesByMachine(".")?我正在使用PowerShell,因此任何使用COM,WMI或.NET的解决方案都是可以接受的,尽管后者更可取.

请注意,此问题有一个返回所有队列对象的解决方案.我不想要这些对象(当有很多队列时它太慢而且有点松散),我只想要他们的名字.

.net com powershell wmi msmq

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

是否有适用于.NET 3.5的Rotor版本?如果是的话,在哪里?

是否有适用于.NET 3.5的Rotor版本?如果是的话,在哪里?

.net rotor

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