小编Lar*_*ann的帖子

如何在C#5.0中强制异步子覆盖

我正在研究一个系统,其中多个客户端对象需要通过接口实现特定的功能,我希望该函数与continuation异步运行(我希望这些实现是I/O绑定的并且想要确保所有客户端对象尽快完成此功能).我正在使用Visual Studio异步CTP刷新SP1,C#"5.0".

在抽象类的子对象中强制执行异步行为的推荐做法是什么(见下文)?我不能(显然)使用虚方法方法强制使用'异步'方法.我只能要求'任务'返回类型.这是否意味着我不应该尝试在子对象中完全要求异步行为?在这种情况下,返回类型应该简单地"无效"吗?

公共接口现在是系统设计的一个不幸后果,但这是一个单独的问题.显然,我无法限制任何人绕过'BaseFoo'并实现'IFoo'接口的异步.

这是代码:

public interface IFoo
{
    void Bar(); //NOTE: Cannot use 'async' on methods without bodies.
}

public abstract class BaseFoo : IFoo
{
    public async void Bar()
    {
        await OnBar(); //QUESTION: What is the right "async delegation" pattern?
    }

    protected virtual async Task OnBar()
    {
        await TaskEx.Yield();
    }
}

public class RealFoo : BaseFoo //NOTE: May be implemented by 3rd party
{
    protected override async Task OnBar()
    {
        //CLIENT: Do work, potentially awaiting async calls

        await …
Run Code Online (Sandbox Code Playgroud)

c# abstract-class asynchronous async-await c#-5.0

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

无法从具有多个返回的"选择"中的用法推断出C#类型参数

我不认为我做了太深奥的事情,但我没有看到任何其他问题.

下面的代码(我把它简化为要点)在C#4中生成了一个编译器错误.但是,类型参数应该是显而易见的 - 有一个最大的公分母("A类"),它也明确定义在方法"Frob"的返回类型.编译器是否应该在lambda表达式中创建所有返回类型的列表,创建一个祖先树来查找它们的共同祖先,然后将它与包含方法的预期返回类型进行协调?

无法从用法推断出方法'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)'的类型参数.尝试显式指定类型参数.

using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Sample
{
    public abstract class A
    {
        private A(int index) { /* ... */ }

        public sealed class A1 : A
        {
            public A1(string text, int index)
                : base(index)
            { /* ... */ }
        }

        public sealed class A2 : A
        {
            public A2(int index)
                : base(index)
            { /* ... */ }
        }

        private static Regex _regex = new Regex(@"(to be)|(not to be)");
        public static IEnumerable<A> Frob(string frobbable) …
Run Code Online (Sandbox Code Playgroud)

c# linq generics inheritance

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

RequestAdditionalTime()的安全开销是多少?

我有一个Windows服务,它在不同的线程上生成一组子活动,并且只有在所有这些活动都成功完成后才会终止.我不知道在收到停止信号后终止活动需要多长时间.在OnStop()期间,我等待该停止信号的间隔,并且只要系统愿意授予它就继续请求额外的时间.

这是基本结构:

class MyService : ServiceBase
{
    private CancellationTokenSource stopAllActivities;
    private CountdownEvent runningActivities;

    protected override void OnStart(string[] args)
    {
        // ... start a set of activities that signal runningActivities
        //       when they stop
        // ... initialize runningActivities to the number of activities
    }

    protected override void OnStop()
    {
        stopAllActivities.Cancel();

        while (!runningActivities.Wait(10000))
        {
            RequestAdditionalTime(15000); // NOTE: 5000 added for overhead
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该在RequestAdditionalTime通话中添加多少"开销" ?我担心请求是累积的,而不是基于每次RequestAdditionalTime调用的时间点.如果是这种情况,增加开销可能会导致系统最终拒绝该请求,因为将来它太过分了.但是如果我不添加任何开销,那么我的服务可以在它有机会请求下一个额外时间块之前终止.

c# windows-services

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

Development Fabric中的Azure服务SSL出错

我遇到了让SSL在Development Fabric中工作的问题.我正在使用Visual Studio 2012 Ultimate和2012年10月的Azure SDK for .NET运行Windows 8 Pro的全新安装.IIS8没有安装,只有IIS Express,它声称支持HTTPS所以我希望这不是问题.

以管理员身份运行VS 12,我创建了一个空白的VS解决方案,添加了一个新的(.NET 4.5)云服务和一个新的ASP.NET MVC 4 Internet Web应用程序项目,并点击了F5.一切正常.然后,当我向Web角色添加SSL证书并将HTTP端点(端口80)替换为HTTPS端点(端口443,带有证书)时,按F5会产生以下错误消息:

适用于Microsoft Visual Studio的Windows Azure工具

将调试器附加到角色实例'deployment18(32).WindowsAzureCloudService.Mvc4WebRole_IN_0',进程ID为:4892'时出错.无法附加.访问被拒绝.

注意,最后一部分("访问被拒绝")有几种变体,特别令人愉快的是"灾难性的失败".:)

VS Output窗口中的唯一消息('General'输出)是:

Windows Azure工具:警告:在角色"Mvc4WebRole"中将专用端口443重新映射到444,以避免在仿真期间发生冲突.

Compute Emulator UI没有多大帮助; 就在实例消失之前,这是我得到的唯一控制台输出(有时会出现其他消息,但偶尔每隔几次运行;我不知道如何捕获这些):

[fabric]角色实例:deployment18(33).WindowsAzureCloudService.Mvc4WebRole.0

[fabric]角色状态未知

[fabric]角色状态暂停

[面料]角色状态忙

[面料]角色状态不健康

[fabric]角色状态已停止

证书是从CA获得的,并且作为带有私钥,扩展属性的.pfx正确导入到本地计算机/个人/证书存储中,并标记为可导出,以获得它的价值.

当我尝试将服务发布到Azure时,我得到一个关于数据库连接字符串的构建(验证)警告(我认为这是不相关的):

连接字符串'DefaultConnection'在项目'Mvc4WebRole'中使用本地数据库'(LocalDb)\ v11.0'.在Windows Azure中运行此应用程序时,此连接字符串将不起作用.要访问其他数据库,您应该更新web.config文件中的连接字符串.

可能更重要的是,部署实际上在Windows Azure活动日志窗口中失败并显示以下历史记录:

上午9:00:25 - 警告:有包验证警告.

上午9点○○分25秒 - 对于WindowsAzureCloudService准备部署 - 2013年1月3日上午8点59分55秒与订阅ID"<...>"使用服务管理URL"https://management.core.windows.net/ " ...

上午9:00:25 - 连接...

9:00:26 AM - 对象引用未设置为对象的实例.

上午9:00:26 - 部署失败并出现致命错误

有人可以帮我解决这个问题吗?我重新启动了几次.;)

提前致谢!

编辑(1月3日,下午4:44):我有一些想法可以帮助我取得进步,但有些想法非常激烈,所以任何建议都会受到赞赏:

  • 有没有办法将Compute Emulator(Dev Fabric)的所有输出捕获到日志文件中,以便我可以查看它?(来自我的服务的System.Diagnostic.Trace调用无济于事,因为在使用HTTPS时我甚至没有达到RoleEntryPoint!) 我想出来了; 看下一个编辑.
  • Azure部署期间的空指针异常令我担心.是否值得尝试重新安装Azure SDK,如果是这样,我该如何进行干净安装呢?
  • 当切换到使用完整的IIS作为模拟器时,有没有人看到这种问题消失了?(这似乎不太可能,因为IIS与IIS Express应该与Azure部署无关 …

azure azure-web-roles visual-studio-2012 azure-sdk-.net

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

何时不使用ACS?

我一直在研究Azure访问控制服务(ACS),它看起来特别擅长处理来自异构(可配置)身份提供程序的身份验证.然后还有一些它似乎支持的其他方案(参见例如ACS How-To).

我的问题恰恰相反:为了正确使用它,它真的有助于我理解ACS 利于什么.ACS有哪些局限性,和/或哪些情况下ACS不合适?

(假设,为了争论,我计划创建一个 - 盈利的) - 公共Web API和相应的网站前端,托管在Azure中 - 即,我确实关心用户身份.如果您愿意,可以进一步假设我的系统将使用.NET构建.)

谢谢!

identity azure claims-based-identity wif acs

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

没有实体框架的存储库

我对Repository模式还不熟悉(刚从石器时代回来,大家好:-).我的困境是,我需要开发一种我的Windows应用程序应用程序今天与SQLite(SQLite-Net)一起工作的方式,并在不久的将来解决WCF服务(或一些非直接数据库访问).基本上我想轻松切换我的数据访问层的提供者.

我遇到的最好的网站就是这个博客(http://blog.longle.net/2013/05/11/genericizing-the-unit-of-work-pattern-repository-pattern-with-entity-framework- in-mvc /)但是和其他任何地方一样,它仍然有大量的Entity框架,我认为这种框架不适用于我的情况.

有人可以指出我可以进一步研究的可能的解决方案或参考吗?

谢谢

c# sqlite

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

运行OData v4客户端代码生成器时的转换错误

我有一个OData服务,从/$metadata端点返回以下内容:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
  <edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="1.0">
    <Schema Namespace="(...)" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
      <!-- ... -->
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>
Run Code Online (Sandbox Code Playgroud)

当我尝试针对此XML文件运行OData v4客户端代码生成器(v2.3.0)时,出现以下错误:

警告:正在运行转换:根元素的元素'edmx:Edmx'是意外的.根元素应该是Edmx.

警告:未声明" http://schemas.microsoft.com/ado/2007/08/dataservices/metadata:DataServiceVersion "属性.

我也只看到一个空的.cs输出文件.

我已经尝试edmx:<Edmx><DataServices>元素中删除名称空间前缀,使该名称空间成为默认名称,并调整其余元素的前缀,但这也不起作用:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Edmx Version="1.0" xmlns="http://schemas.microsoft.com/ado/2007/06/edmx" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:edm="http://schemas.microsoft.com/ado/2008/09/edm">
  <DataServices m:DataServiceVersion="1.0">
    <edm:Schema Namespace="(...)">
      <!-- ... -->
    </edm:Schema>
  </DataServices>
</Edmx>
Run Code Online (Sandbox Code Playgroud)

c# odata

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

这个授权交换有什么问题?

我在Azure网站上使用PluggableAuthOpenID Connect扩展设置了MediaWiki服务器.后者使用PHP OpenID Connect Basic Client库.我是Azure AD域中的管理员example.com,其中我创建了一个应用程序,其中包含App ID URI,登录URL和回复URL https://wiki.azurewebsites.net/.当我导航到wiki时,我会观察到以下行为(暂时省略cookie值):

  1. 客户请求

    GET https://wiki.azurewebsites.net/ HTTP/1.1

  2. RP请求

    GET https://login.windows.net/example.com/.well-known/openid-configuration

  3. IP响应

    (一些回应)

  4. RP响应

    HTTP/1.1 302 Moved Temporarily Location: https://login.windows.net/{tenant_id}/oauth2/authorize?response_type=code&redirect_uri=https%3A%2F%2Fwiki.azurewebsites.net%2F&client_id={client_id}&nonce={nonce}&state={state}

  5. 客户请求

    (跟随重定向)

  6. IP响应

    HTTP/1.1 302 Found Location: https://wiki.azurewebsites.net/?code={code}&state={state}&session_state={session_state}

  7. 客户请求

    (跟随重定向)

  8. RP请求(也重复#2和#3)

    POST https://login.windows.net/{tenant_id}/oauth2/token grant_type=authorization_code&code={code}&redirect_uri=https%3A%2F%2Fwiki.azurewebsites.net%2F&client_id={client_id}&client_secret={client_secret}

  9. IP响应

    (由MediaWiki解释;我目前没有记录完整的响应)

    AADSTS50001: Resource identifier is not provided.

请注意,如果我在步骤8中更改OpenID PHP客户端以提供"resource"参数,则会从AAD获得以下错误响应:

  1. RP请求

    POST https://login.windows.net/{tenant_id}/oauth2/token grant_type=authorization_code&code={code}&redirect_uri=https%3A%2F%2Fwiki.azurewebsites.net%2F&resource=https%3A%2F%2Fwiki.azurewebsites.net%2F&client_id={client_id}&client_secret={client_secret}

  2. IP响应

    AADSTS90027: The client '{client_id}' …

mediawiki azure-active-directory openid-connect

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

WIF 4.5本地开发STS没有运行?

我最近用Windows 8 Pro x64和Visual Studio 2012 Ultimate重新保存了我的机器.这通常让我很开心:),除了我在开发过程中因为缺少依赖项或Windows组件而遇到了一些障碍.这个是身份和访问工具(据我所知).

这是我的问题:我创建了一个空白的VS12解决方案,添加了一个ASP.NET MVC 4 Web应用程序,点击F5,一切运行完美.然后,我将项目配置为使用本地开发STS通过闪亮的新向导(所有默认选项),点击F5和...当我被重定向到它时STS无法响应.

初步要求:

GET http://localhost:4826/ HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

来自Web应用程序的响应:

HTTP/1.1 302 Found
Location: http://localhost:12230/wsFederationSTS/Issue?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a4826%2f&wctx=rm%3d0%26id%3dpassive%26ru%3d%252f&wct=2013-01-05T04%3a56%3a13Z
Run Code Online (Sandbox Code Playgroud)

如何对无响应的STS进行故障排除?我甚至不知道它在哪里运行.(这是在WIF 4.5之前拥有自己的STS项目的几个好处之一.:))

编辑(1月5日上午9:45):我尝试在IIS中运行Web应用程序,而不是IIS Express - 但没有成功.我还卸载并重新安装了身份和访问工具,没有运气.

我在网上看到的所有屏幕截图都显示了当你开始调试时LocalSTS服务的通知图标; 我还没有看到这个出现.

我还在添加STS配置之前和之后比较了.csproj文件; 我没有看到任何更改,甚至没有添加项目类型GUID.这让我想知道出现了什么问题; 如果项目文件中没有任何内容指定,WIF工具如何知道启动LocalSTS?有任何想法吗?这种机制应该如何运作?

编辑(1月5日,上午10:33):我安装了声明感知MVC应用程序示例并运行它,并且LocalSTS立即启动.但是在比较了项目文件(.csproj,Web.config等)之后,我发现没有任何有意义的差异可以标记WIF工具为一个项目而不是另一个项目启动LocalSTS.至少现在我知道工具安装正确了.关于我应该在哪里看的任何想法?

wif visual-studio-2012

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

如何通过 JNI 从 C++ 调用 system.out.println?

我正在尝试调用system.out.printlnJNI。我怎样才能做到这一点?这是我到目前为止所拥有的:

jclass cls = env->FindClass("java/lang/System");        
jmethodID constructor = env->GetStaticMethodID(cls, "out", "()Ljava.out.PrintStream;"); 
Run Code Online (Sandbox Code Playgroud)

java-native-interface

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

根据书签链接重定向

我有一个旧的 Web 应用程序正在迁移到其他系统,我需要确保现有 URL 重定向到新系统。(我使用的是 ASP.NET MVC2。)

通常,我可以重定向到新网站的主页。但是,如果 URL 链接到特定项目,它们将使用 HTML 书签,如下所示:

http://服务器/旧系统/#itemID

我有一个查找文件和翻译函数,可以从“itemID”转到重定向 URL,并且我可以使用 RedirectResult 完成重定向。

但是如何将锚标记作为查询字符串参数获取到服务器(锚标记不会在 HTTP 请求中发送)?我假设我需要某种客户端 JavaScript 来调用单独的服务器方法,但我不知道如何进行翻译。

(请注意,这样做的全部原因是客户端可能已经存储了某个项目的书签链接。)

谢谢!

javascript anchor asp.net-mvc redirect

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

意外的C#警告:实例成员在基类上隐藏静态方法

我很好奇我是否遇到过C#中的编译器错误.(我正在使用Visual Studio 2013 Update 2.还没有Roslyn.)

以下代码会产生意外警告.年字段(或属性)应该不会,我认为,隐藏在基类中的静态年方法,因为这两个被称为非常不同 - 一个上的一个实例变量和一个类上.我不知道两者如何在名称解析中发生冲突.

我错过了什么?

更新:我知道字段和静态方法具有相同的名称.但是,调用这两个东西的方式是完全不同的,我不知道怎么会有任何混乱.换句话说,从类型系统的角度来看,公共字段"隐藏"基类的公共静态方法似乎是错误的.任何人都可以提供实际存在冲突的场景吗?

public class Timeframe
{
    public readonly DateTime From;
    public readonly DateTime To;

    public Timeframe(DateTime from, DateTime to)
    {
        From = from;
        To = to;
    }

    public static YearTimeframe Year(int year)
    {
        return new YearTimeframe(year);
    }

    // .. similar factory methods, e.g. Month and Day, omitted
}

public class YearTimeframe : Timeframe
{
    // WARNING: 'YearTimeframe.Year' hides inherited member 'Timeframe.Year(int)'.
    // (a public property w/ private …
Run Code Online (Sandbox Code Playgroud)

c#

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