小编the*_*onk的帖子

在WCF中获取调用者的主机名

我正在用WCF服务替换现有的Web服务,作为迁移的第一步,我将使用BasicHttpBinding公开端点,直到客户端在今年晚些时候升级.

计划是使用Windows服务托管新的WCF服务(该服务只能在Intranet内调用,因此不需要HTTP),但是暴露基本HTTP和Net.TCP端点,以便迁移可以在阶段.

但是,我在WCF服务中获取调用者的主机名时遇到一些麻烦,查看当前使用Context.Request.UserHostName获取主机名的Web服务代码.我设法得到了呼叫者的用户名和IP地址,但环境中所有相关的权限/安全服务都使用主机名而不是IP,所以有什么方法可以让我在我的服务中获取HostName吗?

PS我已将安全模式设置为TransportCredentialOnly,并将clientCredientialType设置为Windows

c# dns wcf wcf-security

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

在客户端处理WCF服务重新启动

我有一个GUI客户端,它运行在服务器盒上作为Windows服务托管的WCF服务上运行.WCF服务在PerCall InstanceContextMode中运行,并且客户端具有服务客户端的单例实例,并且我想避免在每次调用时重新实例化单例,因为它使我的许多异步调用变得困难.

对我来说问题是,在重新启动Windows服务之后,每次客户端进行调用时都会收到如下异常消息:

由于服务器启动的关闭,输出会话自动关闭,因此该通道不能再用于发送消息.通过将DispatchRuntime.AutomaticInputSessionShutdown设置为false来禁用自动关闭,或者考虑使用远程服务器修改关闭协议.

什么是最好的解决方法?我可以将try-catch子句放在对服务客户端的所有调用周围,并在通信异常上重新实例化单例实例,但这将涉及大量的样板代码.

wcf exception-handling protocolexception

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

如何在C#中控制类型转换

有没有办法控制C#中的类型转换?例如,如果我有两种类型具有基本相同的细节,但一种用于我的应用程序的内部工作,另一种是用于与非.Net应用程序通信的DTO:

public sealed class Player
{
  public Player(string name, long score)
  {
    Name = name;
    Score = score;
    ID = Guid.NewGuid();
  }

  public string Name { get; private set; }

  public Guid ID { get; private set; }

  public long Score { get; private set; }
}

public sealed class PlayerDTO
{
  public PlayerDTO(string name, long score, string id)
  {
    Name = name;
    Score = score;
    ID = id;
  }

  public string Name { get; private set; }

  // the …
Run Code Online (Sandbox Code Playgroud)

.net c# types type-conversion

7
推荐指数
2
解决办法
1007
查看次数

WPF自定义按钮使用资源中的几何

有没有办法使用像这样的PathGeometry集合:

路径1 F1中号170.255,178.837L 170.255,221.158C 170.255,228.917 164.174,230.777 156.745,225.286L 136.003,209.973C 128.572,204.488 128.572,195.512 136.003,190.023L 156.745,174.706C 164.174,169.217 170.255,171.079 170.255,178.837ž

路径2 F1中号152.29,174.464L 134.314,187.734C 129.978,190.937 127.589,195.29 127.589,199.994C 127.589,204.7 129.978,209.057 134.314,212.26L 152.29,225.531C 150.333,229.378 145.412,229.52 139.678,225.286L 118.935,209.973C 111.506,204.489 111.506,195.512 118.935,190.022L 139.678,174.708C 145.412,170.475 150.333,170.617 152.29,174.464 Z

并使用它们制作自定义按钮的方式与制作本例中显示的圆形按钮的方式相同? http://www.wpftutorial.net/Templates.html

该示例涉及覆盖控件模板,如果我想要有许多自定义形状的按钮,这似乎很多工作.如果我想从资源加载几何点怎么办?

.net c# wpf wpf-controls

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

如何在C#中实现内存事务范围?

我有一个缓存,我想放置一些事务范围,以便任何进程必须显式"提交"它想要对缓存对象做的更改,并且可以在进程中途失败时回滚任何更改.

现在,我们在获取请求时深度克隆缓存的对象,它可以工作,但它不是一个干净的解决方案,也涉及相当多的维护.

我记得有一段时间听过.NetRocks上的一些MTS(内存事务范围)解决方案,但不记得它的名字了!有谁知道那里有一个好的MTS框架?或者,如果我要实现自己的,那么如何做到这一点有什么好的指导方针/模式吗?

谢谢,

编辑:我的缩写完全错了!应该是STM,软件交易记忆

.net c# caching transactionscope

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

如何在C#中检查接口是否扩展了另一个接口?

Type.IsSubclassOf方法只适用于两个具体的类型,例如

public class A {}
public class B : A {}
typeof(B).IsSubclassOf(typeof(A)) // returns true
Run Code Online (Sandbox Code Playgroud)

有没有办法找出一个接口是否扩展另一个?例如

public interface IA {}
public interface IB : IA {}
Run Code Online (Sandbox Code Playgroud)

我唯一能想到的是在IB上使用GetInterfaces并检查它是否包含IA,是否有人知道另一种/更好的方法来做到这一点?

.net c# inheritance

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

我什么时候需要管理托管资源?

我一直在研究标准的 Dispose 模式,我只是想知道我需要写什么来释放托管资源?如果这些资源已经“管理”了,那么我肯定不需要做任何事情。

如果是这种情况,并且我的类不包含任何非托管资源(因此不需要由 GC 完成),那么我是否只需要在我的 Dispose 方法中取消完成?:-

public void Dispose()
{
   GC.SuppressFinalize(this);
}
Run Code Online (Sandbox Code Playgroud)

所以假设这是我的课程:

public sealed class MyClass : IDisposable
{
    IList<MyObject> objects; // MyObject doesn't hold any unmanaged resource
    private bool _disposed;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    private void Dispose(bool disposing)
    {
        if (!_disposed)
        {  
            // do I need to set the list to null and 
            // call Dispose on each item in the list?
            if (disposing)
            {
                foreach (var o in objects)
                    o.Dispose();

                objects = …
Run Code Online (Sandbox Code Playgroud)

c# dispose design-patterns

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

为什么 Dart StreamController.addStream 在加入流时无法按预期工作

给出以下 Dart 代码片段:

Stream stream1 = new Stream.periodic(new Duration(seconds: 1), (n) => n)
                           .take(10)
                           .asBroadcastStream();
stream1.listen((n) => print("stream1 : $n"),
               onError : (err) => print("stream1 : $err"),
               onDone : () => print("stream1 : done"),
               cancelOnError : false);

Stream stream2 = stream1.where((n) => n % 2 == 0).take(2);
stream2.listen((n) => print("stream2 : $n"),
               onError : (err) => print("stream2 : $err"),
               onDone : () => print("stream2 : done"),
               cancelOnError : false);

Stream stream3 = stream1.where((n) => n % 2 != 0).take(2);
stream3.listen((n) …
Run Code Online (Sandbox Code Playgroud)

dart dart-async

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

未选中的块不适用于BigInteger?

只是注意到在使用BigInteger时未经检查的上下文不起作用,例如:

unchecked
{
    // no exception, long1 assigned to -1 as expected
    var long1 = (long)ulong.Parse(ulong.MaxValue.ToString());
}

unchecked
{
    var bigInt = BigInteger.Parse(ulong.MaxValue.ToString());

    // throws overflow exception
    var long2 = (long)bigInt;
}
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?大整数转换为其他原始整数类型的方式有什么特别之处吗?

谢谢,

c# biginteger unchecked c#-4.0

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

如何在F#中使用通用计量单位指定union子句?

无论如何定义一个DU,其子句使用通用的度量单位?例如

type MyDU =
| A  of int<_>
| B  of float<_>
Run Code Online (Sandbox Code Playgroud)

此代码无法编译,但我可以指定一个常规函数,该函数接受具有通用度量单位的数值:

let f (n : int<_>) = n * n;;
val f : int<'u> -> int<'u ^ 2>
Run Code Online (Sandbox Code Playgroud)

考虑到每个union子句最终都是一个将后面指定的类型转换为of私有类型的函数,MyDU.A或者MyDU.B是否有一个特定的原因,它为什么它在函数定义而不是类型定义?

有没有办法做我想做的事情?如果没有,我很想知道它为什么不起作用!

谢谢,

generics f# discriminated-union

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