小编ruf*_*ufo的帖子

C#锁定和异步方法

我不清楚(并且找不到足够明确的文档):在异步方法中使用lock关键字时:如果对象已经被阻塞,线程是否会被阻塞,或者它是否会在挂起状态下返回任务(不阻塞线程) ,并在释放锁时返回)?

在下面的代码中,行会阻塞线程吗?如果它阻塞线程(这是我的想法),是否有标准的阻塞解决方案?我正在考虑使用AsyncLock,但首先我想尝试标准的东西.

谢谢.

private object myLock = new object(); 

private async Task MyMethod1(){
  lock (myLock ) {// <---- will this line cause a return of the current method as an Await method call would do if myLock was already locked. 

    .... 
  }
}

// other methods that lock on myLock
Run Code Online (Sandbox Code Playgroud)

c# multithreading

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

构建配置和捆绑标识符

有没有办法在Xamarin中为每个"构建配置"设置"iOS应用程序目标包标识符"?

在XCode中,您可以这样做,这意味着可以为不同的企业客户(我们的案例)编译相同的基本代码.

Xamarin Studio允许创建"构建配置",并且可以在每个配置文件中使用不同的配置文件,但是,它似乎没有办法设置Bundle Id.

请指教.谢谢.

xamarin.ios xamarin-studio

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

使用ASP.NET Web API并排进行基本和表单身份验证

免责声明:首先我要说的是我对MVC4 + Web Api + Web服务+ JQuery的新手.我可能会以错误的角度攻击这个.

我正在尝试在C#for .NET 4中构建Web MVC App + Web API以在Azure中部署.web api将由移动客户端(iOS,使用RestKit)使用.

Web MVC应用程序将相对简单.我们想使用Forms Authentication和SimpleMembership - 我们已经实现并且工作正常.

我们将使用JQuery(Knockout)脚本中的Web API方法来填充网页的各个部分.因此,我们希望JQuery使用由Forms Authentication验证的相同身份.

但是,我们的想法是Web Api可以由移动客户端直接调用.没有表格认证.

我们一直在研究Thinktecture身份模型(http://nuget.org/packages/Thinktecture.IdentityModel https://github.com/thinktecture/Thinktecture.IdentityModel.40).我们将BasicAuth和AcessKey处理程序添加到配置中并且它可以工作(请参阅下面的代码).

当您尝试访问webapi而未经过身份验证时,浏览器将显示基本身份验证对话框并按预期工作.

"问题"是,当您已经通过表单身份验证登录并尝试调用Web Api方法时,您仍然可以获得"基本身份验证"对话框.换句话说,Thinktecture IdentityModel似乎完全忽略了Forms身份验证.

我的问题是:

  1. 我的期望是否正确?一旦我完成了表单身份验证,我就不应该做任何其他事情让JQuery脚本等从同一个浏览器用户会话访问Web API.
  2. 我如何解决它?
  3. 如果我的期望不正确; 这应该怎么样?即:如何使JQuery脚本进行身份验证?

我知道在Stackoverflow中有很多类似的问题,我老实地看了很多,看过视频等等,但要么我缺少一些明显的东西,要么对于技术新手没有明确的文档.

我很感激帮助.谢谢.

public static AuthenticationConfiguration CreateConfiguration()
{
var config = new AuthenticationConfiguration
        {
            DefaultAuthenticationScheme = "Basic",
            EnableSessionToken = true,
            SetNoRedirectMarker = true
        };            

config.AddBasicAuthentication((userName, password) => userName == password, retainPassword: false);
config.AddAccessKey(token =>
        {
            if (ObfuscatingComparer.IsEqual(token, "accesskey123"))
            {
                return Principal.Create("Custom", …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc .net-4.0 azure asp.net-web-api

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

Google Maps SDK for iOS中的热图

有没有办法使用Google Maps SDK for iOS添加热图图层 ?

注意:我指的是Javascript版Google地图中存在的相同功能.

google-maps ios

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

单一复制框架

我们正在考虑采用MonoTouch和MonoDroid来构建跨平台业务应用程序.

此应用程序将处理需要与主数据库同步的本地数据库(仅单向复制).

像我们正在寻找的唯一远程项目是:http://www.blackdogfoundry.com/home.但是,我们并不满足于将其作为服务运行(并且它也适用于Objective-C和Java,而不适用于Mono).

将中央数据库与设备中的本地SQLite同步似乎是一个非常常见的主题.奇怪的是,没有某种框架(付费或开源).

Rhomobile为此提供RhoConnect.仍然不适合我们.

顺便说一句:我知道我们可以使用Web服务和时间戳列来构建它.如果可能的话,我只想避免这样做.

所以问题是:你知道可以从MonoTouch和/或MonoDroid使用的任何框架/库等将本地数据库同步到中央数据库吗?

谢谢.

sqlite mono replication xamarin.ios xamarin.android

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

如何通过.NET中的Google Drive SDK使用刷新令牌生成访问令牌?

我有一个使用Google Drive访问用户文件的.NET应用程序.我能够获得授权代码,并且我能够通过AccessToken和RefreshToken交换授权代码.问题是我无法刷新访问令牌,并在一小时后过期.

与此问题类似:如何通过google drive API使用刷新令牌生成访问令牌?除了我在.NET工作(使用Google.APIs ... DLLs).

我知道这一点:https://developers.google.com/accounts/docs/OAuth2InstalledApp#refresh但是,我期待IAuthorizationState或OAuth2Authenticator对象中提供某种方法,以允许我刷新访问令牌.

请指教.谢谢.

请注意,使用此代码我可以获得访问令牌.只是我希望此代码在Google API中.

    public class OAuth2AccessTokenReponse
    {
        public string access_token;
        public int expires_in;
        public string token_type; 
    }
    public static string refreshAccessToken()
    {
        using (System.Net.WebClient client = new System.Net.WebClient())
        {
            byte[] response = client.UploadValues("https://accounts.google.com/o/oauth2/token", new System.Collections.Specialized.NameValueCollection(){
                {"client_id", ClientID},
                {"client_secret", ClientSecret},
                {"refresh_token", "XXXXX"},
                {"grant_type", "refresh_token"}
            });
            string sresponse = System.Text.Encoding.Default.GetString(response);
            OAuth2AccessTokenReponse o = (OAuth2AccessTokenReponse) Newtonsoft.Json.JsonConvert.DeserializeObject(sresponse, typeof(OAuth2AccessTokenReponse));
            return o.access_token;        
        }
    }
Run Code Online (Sandbox Code Playgroud)

.net google-drive-api

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

DNN重定向到https

我们有一个自托管的DNN 6.01.03站点,在Windows 2003x64,std.

我们已经启用它使用SSL,但是我们想要设置它,以便通过HTTP的用户被重定向到HTTP.

有没有办法做到这一点?似乎在IIS7中我们可以使用IIS Rewrite URL模块,但这是IIS6.

请指教.谢谢.

ssl dotnetnuke

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

文件/文件夹的Google Drive SDK权限

我们正在创建一个桌面应用程序,该应用程序连接到Google云端硬盘并在用户选择的图片中执行一些处理.请注意,图片以任何方式存储在那里(假设用户使用桌面版Google云端硬盘同步工具上传了这些图片).

根据此https://developers.google.com/drive/apps_overview,应用可以请求对云端硬盘应用创建的文件或所有文件的权限.

似乎如果您创建Web Google Drive应用程序,用户可以选择在逐个文件的基础上授予权限.

但是,如果用户将文件夹权限授予我们的Google云端硬盘桌面应用程序,我们希望我们的软件只能看到用户明确授予我们应用程序的文件夹/文件.

否则我们需要访问他们的所有文件,这对用户来说是一种安全问题(如果他们拥有所有类型的文件,有些甚至可能是敏感的,如果我们只使用它们,为什么他们会给我们访问权限?一个子集).

注意:在我的测试中,我使用的是OAuth 2,它运行正常.只是我们被迫要求完整的权限.我们使用.NET,而不是重要.

谢谢.

security google-drive-api

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

可选参数始终填充

我在控制器中有一个方法:

public ActionResult SendNotification(Guid? id=null, SendNotification notification =null)
Run Code Online (Sandbox Code Playgroud)

它响应 /Apps/SendNotification/{guid}?{SendNotification properties}

SendNotification是具有多个字符串属性的模型.

我的问题是SendNotification永远不会为空.无论我如何调用该操作,.NET似乎总是实例化SendNotification的对象(所有字段都为null).

我甚至与测试System.Web.Http.FromUri,并System.Web.Http.FromBody和它仍然做到这一点.

有任何想法吗?

注意:这不是WebApi.这是常规的MVC.

我的项目只有默认路由:

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc

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

.NET core systemd 守护进程中的 FileSystemWatcher

我有一个 .NET core 3.1“worker”服务(例如https://devblogs.microsoft.com/dotnet/net-core-and-systemd/)。

我正在使用 FileSystemWatcher 类来监视文件夹中的新文件并触发它们的进程。该服务在 Windows 中按预期工作(作为服务并将其作为控制台程序运行),并且在 Linux 中直接在终端中运行时也可以工作。

当它作为守护进程 ( sudo systemctl start {myservice}.service) 启动时,它会启动,但不会监视该文件夹。

低于我的工人阶级。

如果我扩大系统中手表的最大数量,它就可以工作。

须藤纳米 /etc/sysctl.conf

fs.inotify.max_user_watches=1048576

为什么我需要增加最大手表数?请注意,我正在监视的文件夹只有大约 100 个文件(默认值约为 8192 个最多手表)。

我担心的是,我对这个类有一些不理解的地方,所以我为手表的最大数量设置了一个任意高的数字,而不知道何时会达到这个值或为什么。另外,FileSystemWatcher 似乎完全不知道发生了什么,所以我的程序对此无能为力,因为它不知道。


    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;

        private FileSystemWatcher _fileSystemWatcher;

        public Worker(ILogger<Worker> logger)
        {
            _logger = logger;
        }

        public override Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Service startup.");
             fileSystemWatcher = new FileSystemWatcher(@"/myfolder/myfolder2");
            _fileSystemWatcher.IncludeSubdirectories = true;

            _fileSystemWatcher.Filter = "*.xml"; 
            _fileSystemWatcher.Created += (e, args) => _logger.LogWarning("StartAsync watcher: …
Run Code Online (Sandbox Code Playgroud)

c# linux systemd .net-core

6
推荐指数
0
解决办法
3799
查看次数