小编Big*_*toe的帖子

我对WCF有什么看法?

我在MS技术方面的开发时间比我在此阶段要记住的时间长.当.NET到达现场时,我认为它们触及了头部,每次迭代和版本我认为他们的技术越来越强大,并期待每次发布.

但是,由于去年必须与WCF合作,我必须说我发现这项技术非常难以使用和理解.最初它非常吸引人但是当你开始深入了解它时,配置是一场噩梦,必须覆盖消息大小的行为,消息中包含的对象数量,安全模型的复杂性,出现故障时处理代理以及最终回到定义代码而不是XML中的接口.

它只是没有开箱即用,我认为应该.我们在测试自己时或者当我们的产品在现场时,我们发现了上述所有问题.

我确实理解这一切背后的基本原理,但肯定他们可以提出更简单的实现机制.

我想我要问的是,

  • 我是以错误的方式看待WCF吗?
  • 它对替代品有什么优势?
  • 在什么情况下我应该选择使用WCF?

OK伙计们,对于延迟回复感到抱歉,工作确实有一个令人讨厌的习惯,有时会妨碍:)

一些说明我对WCF的主要描述我想到了以下几个方面虽然它开箱即用,但你的左侧有一些重大的惊喜.如上所述,基本事物在被覆盖之前是受限制的

  1. 字符串的大小可以通过不能超过8K
  2. 可以在单个消息中传递的对象数受到限制
  3. 代理不会自动从故障中恢复
  4. 配置的数量虽然有好处,但要了解所有内容以及使用什么以及在哪种情况下难以理解.特别是在具有不同安全要求的现场部署软件时等.在谈论配置时,我们不得不在后端数据库中隐藏我们的许多内容,因为现场的安全和网络人员试图在不理解的情况下更改配置文件中的内容它.
  5. 保持接口的配置在代码中,而不是移动到XML中显式定义的接口,几乎任何东西都可以发布和使用它们.我知道我们可以从程序集中导出XML,但它充满了垃圾,并且某些代码生成器会阻塞它.

我知道世界在继续前进,我已经多次(最近22年来我一直在开发)并且正在积极地使用WCF,所以不要误解我的意思,我明白它的用途是什么它在哪里.

我认为应该有更简单的配置/部署选项,更容易的设置和更好的配置管理(SQL配置提供程序可能,而不仅仅是web.config/app.config文件).

c# wcf web-services

49
推荐指数
4
解决办法
5099
查看次数

在WaitHandle.WaitOne方法上使用的exitContext是什么

System.Threading.AutoResetEvent e = new System.Threading.AutoResetEvent(false);
bool b = e.WaitOne(1000, false);
Run Code Online (Sandbox Code Playgroud)

我在我的时间里做了很多多线程开发,并且总是想知道该方法的用途是什么.WaitOne上的第二个布尔参数称为exitContext.MS帮助声明"如果在等待之前退出同步域(如果在同步上下文中),则为true,并在之后重新获取;否则为false."

任何人都知道这意味着什么?这是我应该担心的事情吗?

亲切的问候诺埃尔

c# multithreading

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

哪个更高效的Cstr(值)或value.ToString()

我想知道哪个更有效,使用CStr()或object.toString().我问这个的原因是因为我尽管CStr()所做的就是在它正在处理的对象上调用.ToString()方法.

但是当最近使用没有任何类型约束的泛型方法时,我不得不使用object.ToString()而不是CStr(object),以下纯粹是一个例子来说明这个问题.

Public Function IDFromObject(Of ID_TYPE)(ByVal value As ID_TYPE) As String
    Return value.ToString
End Function
Run Code Online (Sandbox Code Playgroud)

按预期编译,但以下没有使用CStr().它给出了ID_TYPE类型的编译错误值,无法转换为字符串.但它显然可以使用.ToString()

Public Function IDFromObject(Of ID_TYPE)(ByVal value As ID_TYPE) As String
    Return CStr(value)
End Function
Run Code Online (Sandbox Code Playgroud)

vb.net casting

9
推荐指数
3
解决办法
2万
查看次数

从ProcessThread到托管线程

在我们无法重现的生产环境中,我们会定期关闭Windows服务.可能需要几个月才能再次发生.

我正在进行一些诊断尝试并帮助解决这个问题,我正在考虑的一件事是在我们开始关闭应用程序后将事件添加到系统线程池60秒.我们的应用程序应在10秒内完全关闭.

在这种情况下,我想跟踪进程的剩余运行线程到事件日志.

我可以使用System.Diagnostics.Process.GetCurrentProcess.Threads获取正在运行的线程.这些线程对象具有本机Win32线程ID等.

我想知道是否有任何方法可以从这些线程ID返回到它们在当前进程中表示的任何托管线程.我试图这样做的原因是因为我们的线程池和其他线程产生了我们给出了代表它们的目的的名称,它真的有助于把它们拿回来.

c# multithreading diagnostics

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

是否可以在C#中强制使用using语句

我真的希望能够使用某种类型的属性来装饰我的类,这将强制使用using语句,以便始终安全地处理类并避免内存泄漏.有人知道这种技术吗?

c# using

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

日志文件中有 IIS 日志头是否意味着 IIS 在白天被重置?

当我查看 IIS 日志文件时,我可以在一天中的不同时间看到标题行被写入日志文件。我唯一一次看到这种情况发生是在 IIS 重置时;或启动。例如下面的标题行;

#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2010-10-18 07:28:06
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status 
Run Code Online (Sandbox Code Playgroud)

客户说没有发生 IIS 重置;但是日志文件中的这个条目是否意味着 IIS 肯定是出于某种可能超出客户控制范围的原因而重置的。

iis logging

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

我想使用Topshelf实例名称作为log4net日志文件名的一部分

当使用TopShelf创建服务实例时,我希望能够访问服务实例名称(在安装期间可能已在命令行上设置为服务;这意味着我无法直接访问它)能够将其用作Log4Net中日志文件名的属性.

在下面的示例代码中,我们设置了可用于登录全局上下文的各种属性.我也希望能够在这里设置服务实例名称; 但在主机初始化期间似乎无法访问它.

有关如何在运行时使用Topshelf访问服务实例名称值的任何建议.

下面的示例是我们所有服务使用Topshelf启动服务的常用功能的一部分.

public static TopshelfExitCode Run(Func<IConsumerController> controllerFactory,
    string serviceName,
    string serviceDescription)
{
    // Initialise the Global log4net properties so we can use them for log file names and logging when required.
    log4net.GlobalContext.Properties["custom-assembly"] = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
    log4net.GlobalContext.Properties["custom-processname"] = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
    log4net.GlobalContext.Properties["custom-process-id"] = System.Diagnostics.Process.GetCurrentProcess().Id;
// WOULD LIKE ACCESS TO THE SERVICE INSTANCE NAME HERE
    var logFileInfo = new System.IO.FileInfo(".\\Log.config");
    log4net.Config.XmlConfigurator.Configure(logFileInfo);

    var host = HostFactory.New(r =>
    {
        var controller = controllerFactory();
        r.Service<ConsumerService>( () => new ConsumerService(controller));
        r.SetServiceName(serviceName);
        r.SetDescription(serviceDescription + " © XYZ …
Run Code Online (Sandbox Code Playgroud)

log4net topshelf

5
推荐指数
2
解决办法
1628
查看次数

无法从_Layout页面使用servicestack razor访问模型/请求数据

我有一个共享的_Layout.cshtml页面,我需要访问调用该页面的服务,或访问请求dto或Model,以便我可以根据调用服务的类型,模型呈现不同的选项类型或请求类型.在_Layout页面中,我似乎无法访问上述任何内容.我对SS-Razor很陌生,可能只是没有看到更大的图片,但这是我到目前为止尝试访问该模型所做的工作.

在_Layout.cshtml中,我定义了以下内容,因此我可以访问ViewBag以及会话信息.

@using ServiceStack.Razor
@inherits ViewPage<ResponseBase>
Run Code Online (Sandbox Code Playgroud)

我也试过了一个简单的视图页面

@inherits ViewPage
Run Code Online (Sandbox Code Playgroud)

这使我可以访问_Layout中的基本页面基础结构.但是布局中的模型总是为空,即使我暂时改变了从ResponseBase类继承的所有响应,并且可以在上面的代码中看到,我继承了所有模型至少具有ResponseBase的页面.

然后我设置了一个全局过滤器,我将请求DTO注入请求项,因为这将是一个开始,并将证明我可以在布局中访问一些信息.所以我将以下内容添加到应用主机,

this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
   if(httpReq != null && httpReq.Items != null)
                    httpReq.Items["RequestDto"] = requestDto;
}); 
Run Code Online (Sandbox Code Playgroud)

我可以看到过滤器上有一个断点,可以看到reqestD已被添加到集合中,所以我知道这件作品至少有效.当我尝试使用下面的代码访问_Layout中的requestDto时,Request.Items永远不会包含RequestDto.

@{
    RequestBase myRequest = null;
    if(base.Request != null)
        if(base.Request.Items.ContainsKey("RequestDto"))
            myRequest = (RequestBase)base.Request.Items["RequestDto"];
}
Run Code Online (Sandbox Code Playgroud)

所有这些都是试验和错误,因为在我的生活中,我无法在Razor View页面中设置断点,因此我可以看到那里正在发生的事情.在这个阶段我经历过RazorRockStars样本很多次,并且看不到我在那里尝试做什么的任何例子.

那么有没有人有关于如何解决这个问题的任何指示,示例或建议.随意指出一种完全不同的方法,在_Layout中呈现不同的选项,因为在这个阶段我没有多少头发,我愿意尝试任何事情.

razor c#-4.0 servicestack

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

MassTransit Azure 发布许多消息

我只是想知道是否有人曾经发送/发布过 100 万以上使用 MassTransit 向 Azure

目前,一次发送/发布一条消息的过程非常缓慢(大约 25K 条消息需要 10 分钟)。无论如何,我看不到批量发送消息,但我可能会丢失一些东西。

我确实看到Azure支持SendBatch,它的总体消息大小限制为256K,但是我们有很多小消息需要出去,我想知道是否有人扩展了MassTransit来支持此功能,或者有其他一些关于如何提高绩效的建议。

所有的建议都得到了极大的重视。

c# masstransit azureservicebus

5
推荐指数
0
解决办法
477
查看次数

Xamarin Android,java类ListenableFuture被定义多次,带有新的Andriod App

我在Visual Studio 2022中创建了一个全新的Xamarin Android 应用程序

然后,我引用了Xamarin.Stripe.Terminal.Android库的v1.0.17.2,因为我需要在读卡器上执行一些交易。

我编译了解决方案,没有触及一行代码,但出现了以下问题

类型 com.google.common.util.concurrent.ListenableFuture 被定义多次:C:\Users\XYZ.nuget\packages\xamarin.google.guava.listenablefuture\1.0.0.2\buildTransitive\monoandroid50\guava-listenablefuture.jar: com/google/common/util/concurrent/ListenableFuture.class,obj\Debug\120\lp\54\jl\guava-28.1-android.jar:com/google/common/util/concurrent/ListenableFuture.class

您可以在错误消息中看到两个 jar 引用

1.0.0.2\buildTransitive\monoandroid50\guava-listenablefuture.jar

obj\调试\120\lp\54\jl\guava-28.1-android.jar

如果我采用 Visual Studio 构建的完整 java 命令行,然后删除对 j​​ar 的引用

1.0.0.2\buildTransitive\monoandroid50\guava-listenablefuture.jar

然后 java 从命令行正确编译,并出现大量警告。


我只是想知道是否有某种方法可以从 Visual Studio 的编译过程中排除此 JAR,以便构建可以正确继续。

任何指导将不胜感激。

xamarin.android xamarin

5
推荐指数
0
解决办法
844
查看次数

AngleSharp 提取格式化文本

我想知道是否可以使用 AngleSharp 从 HTMLDocument 中提取格式化文本。我正在使用以下代码来提取文本。我遇到的问题是提取的文本一起运行,每个元素之间没有中断。

var parser = new HtmlParser();
var document = parser.Parse("<script>var x = 1;</script> <h1>Some example source</h1><p>This is a paragraph element</p>");
var text = document.Body.Text();
Run Code Online (Sandbox Code Playgroud)

这将返回以下文本

一些示例源这是一个段落元素

理想情况下,我希望它返回 Some example source 这是一个段落元素 ,其中每个节点文本值之间有一些分隔。

c# anglesharp

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

使用System.Transactions.SafeIUnknown的.NET垃圾收集器中的内存泄漏

I'm trying to track down a memory leak in an application using ANTS profiler. I tracked it down to the Garbage collector where we have a list of objects System.Transactions.SafeIUnknown that sit there forever in the garbage collector, are in the finalizer queue but never get released.

I can find not documentation what so ever on the System.Transactions.SafeIUnknown nor can I determine what would create or reference this, it's nothing intentional on our part.

I am hoping someone out there …

.net c# memory-leaks

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

ServiceStack AuthFeature.HtmlRedirect被忽略

当我设置身份验证功能重定向属性时,我在访问安全页面时没有应用它.例如,我将身份验证功能设置为重定向以使用页面中的自定义登录.

authFeature.HtmlRedirect = "http://localhost/SimpleService/login";
Run Code Online (Sandbox Code Playgroud)

但是,如果我转到安全控制器,这个重定向永远不会被应用,它总是使用服务堆栈默认的"/ login".它正在使用的重定向甚至不包括SimpleService的原始站点名称.以下样品控制器.

[Authenticate]
public class PrivateController : ControllerBase
{
    public ViewResult SecurePage()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

我也试图覆盖Authenticate属性上的重定向,但无济于事.有没有人有任何想法我可能做错了什么?

[Authenticate(HtmlRedirect = "http://localhost/SimpleService/login")]
public class PrivateController : ControllerBase
{
    public ViewResult SecurePage()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

authentication servicestack

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