我正在用WCF服务替换现有的Web服务,作为迁移的第一步,我将使用BasicHttpBinding公开端点,直到客户端在今年晚些时候升级.
计划是使用Windows服务托管新的WCF服务(该服务只能在Intranet内调用,因此不需要HTTP),但是暴露基本HTTP和Net.TCP端点,以便迁移可以在阶段.
但是,我在WCF服务中获取调用者的主机名时遇到一些麻烦,查看当前使用Context.Request.UserHostName获取主机名的Web服务代码.我设法得到了呼叫者的用户名和IP地址,但环境中所有相关的权限/安全服务都使用主机名而不是IP,所以有什么方法可以让我在我的服务中获取HostName吗?
PS我已将安全模式设置为TransportCredentialOnly,并将clientCredientialType设置为Windows
我有一个GUI客户端,它运行在服务器盒上作为Windows服务托管的WCF服务上运行.WCF服务在PerCall InstanceContextMode中运行,并且客户端具有服务客户端的单例实例,并且我想避免在每次调用时重新实例化单例,因为它使我的许多异步调用变得困难.
对我来说问题是,在重新启动Windows服务之后,每次客户端进行调用时都会收到如下异常消息:
由于服务器启动的关闭,输出会话自动关闭,因此该通道不能再用于发送消息.通过将DispatchRuntime.AutomaticInputSessionShutdown设置为false来禁用自动关闭,或者考虑使用远程服务器修改关闭协议.
什么是最好的解决方法?我可以将try-catch子句放在对服务客户端的所有调用周围,并在通信异常上重新实例化单例实例,但这将涉及大量的样板代码.
有没有办法控制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) 有没有办法使用像这样的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
该示例涉及覆盖控件模板,如果我想要有许多自定义形状的按钮,这似乎很多工作.如果我想从资源加载几何点怎么办?
我有一个缓存,我想放置一些事务范围,以便任何进程必须显式"提交"它想要对缓存对象做的更改,并且可以在进程中途失败时回滚任何更改.
现在,我们在获取请求时深度克隆缓存的对象,它可以工作,但它不是一个干净的解决方案,也涉及相当多的维护.
我记得有一段时间听过.NetRocks上的一些MTS(内存事务范围)解决方案,但不记得它的名字了!有谁知道那里有一个好的MTS框架?或者,如果我要实现自己的,那么如何做到这一点有什么好的指导方针/模式吗?
谢谢,
编辑:我的缩写完全错了!应该是STM,软件交易记忆
该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,是否有人知道另一种/更好的方法来做到这一点?
我一直在研究标准的 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) 给出以下 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) 只是注意到在使用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)
知道为什么会这样吗?大整数转换为其他原始整数类型的方式有什么特别之处吗?
谢谢,
无论如何定义一个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是否有一个特定的原因,它为什么它在函数定义而不是类型定义?
有没有办法做我想做的事情?如果没有,我很想知道它为什么不起作用!
谢谢,
c# ×7
.net ×4
wcf ×2
biginteger ×1
c#-4.0 ×1
caching ×1
dart ×1
dart-async ×1
dispose ×1
dns ×1
f# ×1
generics ×1
inheritance ×1
types ×1
unchecked ×1
wcf-security ×1
wpf ×1
wpf-controls ×1