小编Mat*_*rli的帖子

使用IIS或Windows服务进行ServiceStack的优势

我写了一个C#服务器应用程序(Windows服务),通过REST和ServiceStack为各种客户端提供数据(用.NET Compact Framework和Mono for Android编写的本机应用程序).没有涉及Web应用程序.

使用IIS来托管我的服务器,而不是使用它作为Windows服务自托管,会给我任何优势(速度,可扩展性,可靠性)?

谢谢!

iis rest servicestack

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

推迟启动Task <T>

我有一系列方法(具有可变数量的参数)返回一个Task,我想通过传递Task来创建一个在每个方法之前和之后执行某些操作的方法。我简化了此示例中的所有内容(删除了cancelToken,实际处理等):

public async Task<string> GetDataString()
{
    Console.WriteLine("Executing");
    return "test";
}


public async Task<T> Process<T>(Task<T> task)
{
    Console.WriteLine("Before");
    var res = await task;
    Console.WriteLine("After");
    return res;
}
Run Code Online (Sandbox Code Playgroud)

而在我的主要:

Task<string> task = GetDataString();
string result = await Process<string>(tasks);
Console.WriteLine(res);
Run Code Online (Sandbox Code Playgroud)

控制台输出是

Executing
Before
After
test
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能创建任务而不实际启动它?并仅在等待之前启动它?

我设法通过创建PauseToken来做到这一点,如本文所述:https ://devblogs.microsoft.com/pfxteam/cooperatively-pausing-async-methods/ 但我想知道是否有更好的方法。

谢谢,Mattia

c# task-parallel-library async-await .net-core

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

如何获得客户端的IP?

我写了一个自托管服务堆栈服务器和一个客户端,两个桌面应用程序.在我非常基本的PING测试服务中,我正在尝试检索客户端的IP.服务器在192.168.0.87:82,客户端我在同一台计算机和另一台计算机上尝试过,但RemoteIp和UserHostAddress总是返回192.168.0.87:82.XRealIp为空.我也试过base.Request.RemoteIp,但仍然是192.168.0.87:82.

我究竟做错了什么?

public RespPing Any(ReqPing request)
    {
        string IP = base.RequestContext.Get<IHttpRequest>().RemoteIp;
        string MAC = request.iTransactionInfo.MAC;

        Log(MAC,IP, base.RequestContext.Get<IHttpRequest>().RemoteIp + base.RequestContext.Get<IHttpRequest>().XRealIp + base.RequestContext.Get<IHttpRequest>().UserHostAddress);

        RespPing response = new RespPing { Result = "PONG" };

        return response;
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!

servicestack

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