小编Nik*_*sev的帖子

WCF REST,流式上传文件和httpRuntime maxRequestLength属性

我已经创建了一个简单的WCF服务来原型文件上传.服务:

[ServiceContract]
public class Service1
{
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "/Upload")]
    public void Upload(Stream stream)
    {
        using (FileStream targetStream = new FileStream(@"C:\Test\output.txt", FileMode.Create, FileAccess.Write))
        {
            stream.CopyTo(targetStream);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它使用webHttpBinding与transferMode设置为"流"和maxReceivedMessageSize,maxBufferPoolSize并maxBufferSize全部设置为2GB.httpRuntime已maxRequestLength设置为10MB.

客户端以下列方式发出HTTP请求:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(@"http://.../Service1.svc/Upload");

request.Method = "POST";
request.SendChunked = true;
request.AllowWriteStreamBuffering = false;
request.ContentType = MediaTypeNames.Application.Octet;

using (FileStream inputStream = new FileStream(@"C:\input.txt", FileMode.Open, FileAccess.Read))
{
    using (Stream outputStream = request.GetRequestStream())
    {
        inputStream.CopyTo(outputStream);
    } …
Run Code Online (Sandbox Code Playgroud)

c# streaming wcf file-upload httpwebrequest

18
推荐指数
2
解决办法
4959
查看次数

如何在没有Visual Studio的情况下构建Windows应用商店应用?

我需要这个用于构建服务器 - 我想避免在那里安装完整的Visual Studio.

我使用最新的v12 MSBuild与应用程序一起构建解决方案.安装.NET Framework 4.5.1和Windows 8.1 SDK让我了解了几个编译错误.安装完所有,现在,我得到这个:

错误MSB4019:找不到导入的项目"C:\ Program Files(x86)\ MSBuild\Microsoft\WindowsXaml\v12.0\Microsoft.Windows.UI.Xaml.CSharp.targets".确认声明中的路径是否正确,以及该文件是否存在于磁盘上.

该目标文件存在自己的计算机与Visual Studio 2013上安装,所以我想这与2013年VS了那里当我试图把整个文件夹粘贴到构建机器(我知道,一个愚蠢的事),我得到了以下编译警告和错误:

警告MSB3644:找不到框架".NETCore,Version = v4.5.1"的引用程序集.要解决此问题,请为此框架版本安装SDK或Targeting Pack,或者将应用程序重新定位到已安装SDK或Targeting Pack的框架版本.

XamlCompiler错误WMC1006:无法解析程序集或Windows元数据文件'System.Runtime.dll'

Xaml内部错误错误WMC9999:类型Universe无法解析程序集:System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a.

显然,复制和粘贴内容并不是一种可行的方法.有没有一些适当的方法来实现我想要的?

编辑:构建计算机安装了Windows Server 2012,而不是Windows 8.1.这可能是个问题吗?

编辑2:在比较开发机器和构建服务器上执行的msbuild输出后,我注意到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5.1构建机器中缺少该文件夹(只有4.5个文件夹).粘贴后,我收到以下错误:

CompileXaml错误WMC9998:由于缺少Windows 8.1支持而导致XBF生成失败,在项目文件中设置属性<DisableXbfGeneration> true </ DisableXbfGeneration>,然后重试.

Windows 8.1工具链中仍然缺少某些东西......

c# msbuild visual-studio windows-store-apps

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

如何组织单元测试,不要让重构成为一场噩梦?

我目前组织单元测试的方法归结为以下几点:

  • 每个项目都有自己的专用项目和单元测试.对于项目BusinessLayer,有一个BusinessLayer.UnitTests测试项目.
  • 对于我想要测试的每个类,测试项目中有一个单独的测试类放在完全相同的文件夹结构中,并且与测试中的类完全相同.对于一类CustomerRepository命名空间下BusinessLayer.Repositories,有一个测试类CustomerRepositoryTests的命名空间BusinessLayerUnitTests.Repositories.

每个测试类中的方法遵循简单的命名约定MethodName_Condition_ExpectedOutcome.因此,类CustomerRepositoryTests包含一类测试CustomerRepository与Get定义方法如下所示:

[TestFixture]
public class CustomerRepositoryTests
{
    [Test]
    public void Get_WhenX_ThenRecordIsReturned()
    {
        // ...
    }

    [Test]
    public void Get_WhenY_ThenExceptionIsThrown()
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法对我很有用,因为它使得对某些代码的定位测试非常简单.在相反的网站上,它使代码重构变得非常困难,应该是:

  • 当我决定将一个项目分成多个较小的项目时,我还需要拆分我的测试项目.
  • 当我想要更改类的名称空间时,我必须记住更改测试类的名称空间(和文件夹结构).
  • 当我更改方法的名称时,我必须完成所有测试并在那里更改名称.当然,我可以使用搜索和替换,但这不是很可靠.最后,我仍然需要手动检查更改.

有没有组织单元测试仍然让我找到测试特定的代码迅速的一些巧妙的方式,并在同一时间更借本身对重构?

或者,是否有一些,呃,也许是Visual Studio扩展,这将允许我以某种方式说"嘿,这些测试是针对该方法的,所以当方法的名称发生变化时,请非常友好并改变测试" ?说实话,我正在认真考虑写自己的东西:)

c# tdd nunit unit-testing code-organization

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

是否可以在公开获取getter的同时明确实现属性设置器?

当我定义包含只写属性的接口时:

public interface IModuleScreenData
{
    string Name { set; }
}
Run Code Online (Sandbox Code Playgroud)

并试图(天真地)明确地实施它,并且该财产也有一个公开可用的getter:

public class ModuleScreen : IModuleScreenData
{
    string IModuleScreenData.Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误:

错误'IModuleScreenData.Name.get'添加了在接口成员'IModuleScreenData.Name'中找不到的访问者

但是,在使用这种替代语法之后,或多或少会出现错误:

public class ModuleScreen : IModuleScreenData
{
    public string Name { get; IModuleScreenData.set; }
}
Run Code Online (Sandbox Code Playgroud)

我没有编译,我想我想做的事情是不可能的.我是对的,还是有一些秘密的酱语法呢?

c# language-features properties explicit-implementation

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

如何正确检索将数据插入Google Fit的应用的包名?

我有以下代码用于从Google Fit检索用户活动列表:

public void getActivitiesData(Date from, Date till) {
    DataReadRequest readRequest = new DataReadRequest.Builder()
        .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
        .bucketByTime(1, TimeUnit.DAYS)
        .setTimeRange(from.getTime(), till.getTime(), TimeUnit.MILLISECONDS)
        .build();

    Fitness.HistoryApi.readData(apiClient, readRequest).setResultCallback(new com.google.android.gms.common.api.ResultCallback<DataReadResult>() {
        @Override
        public void onResult(DataReadResult dataReadResult) {
            Status status = dataReadResult.getStatus();
            if (status.isSuccess()) {

                for (Bucket bucket : dataReadResult.getBuckets()) {
                    if (!bucket.getDataSets().isEmpty()) {
                        DataSet dataSet = bucket.getDataSets().get(0);
                        String sourceAppPackageName = getSourceAppPackageNameFromDataSet(dataSet);
                        for (DataPoint dp : dataSet.getDataPoints()) {
                            for (Field field : dp.getDataType().getFields()) {
                                String fieldName = field.getName();
                                if (fieldName != null && fieldName.equals("activity")) {
                                    String …
Run Code Online (Sandbox Code Playgroud)

android google-play-services google-fit-sdk google-fit

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

如何根据用户区域设置格式化数字和日期?

我需要一种方法来根据用户的区域设置自动格式化Date和Number对象.

到目前为止,我一直在使用toLocaleString()日期功能.对于数字,toLocaleString()也可以使用,但正如您在我准备的jsFiddle中所看到的,浏览器之间的结果差异很大.在我的Windows机器上使用英语(美国)语言环境,我得到了这个:

  • IE9:15,000.00
  • Firefox:15,000
  • Chrome:15000

在Chrome中,似乎toLocaleString()对数字根本不起作用.除了这种方法,我还尝试过:

  • 要使用MicrosoftAjax.js库localeFormat()函数,但无论我在PC上设置哪个区域(通过使用"区域和语言"对话框),日期和数字仍然以美国格式编码.
  • 使用像Globalize这样的库.虽然它们确实提供格式化功能,但它们无法自动检测用户的语言环境.

因此,总结一下:如何自动设置数字和日期格式以尊重用户浏览网页的区域设置,以适用于所有主流浏览器(IE,Firefox,Chrome)的方式?

javascript locale internationalization

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

HttpClient HttpResponseMessage地址/ URI

我正在开发一个C#WinRT应用程序,它向Web服务器发出POST和GET请求.

有没有人知道在使用HttpClient对象时是否有办法获取响应URI /地址?

如果我使用HttpWebRequest/HttpWebResponse类,那么我可以获取此信息(通过HttpWebResponse中的ResponseUri属性),但我没有看到如何使用HttpClient/HttpResponseMessage类获取它.

谢谢

c# httpclient windows-runtime .net-4.5

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

如何在Android应用程序中调用Mono for Android类?

我在Mono for Android项目中创建了一个相当简单的Activity:

[Activity(Label = "AndroidApplication1", MainLauncher = true, Icon = "@drawable/icon")]
public class Activity1 : Activity
{
    private string value = "intitial";

    [Export]
    public string GetString()
    {
        return value;
    }

    [Export]
    public void SetString(string newValue)
    {
        value = newValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

该活动应仅作为概念验证,因此其简单性.现在,我希望能够从基于Java的"普通"Android应用程序调用方法GetString().

在Xamarin的文档中,我已经阅读了Java to Managed interop,这似乎正是我正在寻找的.如果我理解正确,当Mono for Android应用程序编译时,它会生成称为Android Callable Wrappers(ACW)的Java类.然后我应该可以从基于Java的Android应用程序调用这些ACW上的方法.

问题是,我如何从基于Java的Android应用程序引用编译的Mono for Android应用程序(apk文件)?

这是我现在卡住的地方,无法找到任何具体的例子.这里有类似的问题(这个和这一个)和一些博客,但它们只是归结为"使用ACW".但到底怎么样?也许我错过了一些明显的东西,不是Android家伙.

我试过的是动态加载我从我的Mono for Android apk中拉出来的dex文件.我只是把它放在存储卡上,然后尝试使用基于Java的Android应用程序加载它(我已经关注了这篇博文).找到了ACW类,但是当我尝试创建它的实例时,我收到以下错误:DexClassLoader

找不到本机Lmno/android/Runtime; .register(Ljava/lang/String; Ljava/lang/Class; Ljava/lang/String;)的实现

我想我必须以某种方式将Mono …

c# java android interop xamarin.android

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

如何在GeckoFX中设置用户代理?

在使用webbrowser控件一段时间后,我决定尝试gecko,因为我遇到过webbrowser的问题,速度低,性能下降.我下载了最新版本的geckofx(16.0.0.2)和xulrunner(16.0.2),并创建了一个geckoWebbrowser控件.当我尝试导航到一个网页时,我得到了一个javascript.alert,我的网页浏览器不受支持,我应该使用firefox> 2.0.0.2,这当然是荒谬的.问题是 - 我假设 - 检测到的useragent字符串是"Mozilla/5.0(Windows NT 6.1; WOW64; rv:16.0)Gecko//16.0"而不是正常的firefox字符串"Mozilla/5.0(Windows NT 6.1; WOW64; rv:18.0)Gecko/20100101 Firefox/18.0".控件的useragent字符串中缺少'20100101'和'Firefox'.有没有办法用C#改变它?我使用C#winforms .net 4.5.

c# geckofx winforms-to-web

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

实现IEqualityComparer <T>以比较任何类的任意属性(包括匿名)

我正在编写实现IEqualityComparer的这个整洁的类,因此我可以将任何匿名类型传递给它(或实际上任何具有属性的类型),它将通过比较类型的属性值自动比较类型.

public class CompareProperty<T> : IEqualityComparer<T>
    {
        private Type type;
        private PropertyInfo propInfo;
        private string _fieldName;

        public string fieldName
        {
            get;
            set;
        }

        public CompareProperty(string fieldName)
        {
            this.fieldName = fieldName;
        }

        public bool Equals<T>(T x, T y)
        {
            if (this.type == null)
            {
                type = x.GetType();
                propInfo = type.GetProperty(fieldName);
            }
            object objX = propInfo.GetValue(x, null);
            object objY = propInfo.GetValue(y, null);
            return objX.ToString() == objY.ToString();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我认为这是一个很好的小助手功能,我可以多次使用.

为了使用它,我必须这样做:

var t = typeof(CompareProperty<>);
var g = t.MakeGenericType(infoType.GetType());
var c = g.GetConstructor(new …
Run Code Online (Sandbox Code Playgroud)

c# generics reflection equality iequalitycomparer

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

为什么CIL方法中需要将每个参数加载到堆栈上?

在我的应用程序中,我需要动态创建一个包含多个属性的类型。我知道在这种情况下,必须使用 ILGenerator 为属性的 getter 和 setter 方法生成 CIL。

经过反复试验,我终于得到了以下代码,它为我生成了一个 setter 方法:

MethodBuilder setMethod = customTypeBuilder.DefineMethod(propertyName + "_set", MethodAttributes.Public | MethodAttributes.HideBySig, null, new Type[] {propertyType});
ILGenerator setIlGenerator = setMethod.GetILGenerator();
setIlGenerator.Emit(OpCodes.Ldarg_0);
setIlGenerator.Emit(OpCodes.Ldarg_1);
setIlGenerator.Emit(OpCodes.Stfld, backingField);
setIlGenerator.Emit(OpCodes.Ret);
Run Code Online (Sandbox Code Playgroud)

该代码运行得很好,但有一件事我不明白。为什么需要调用‘Ldarg_0’指令?

我知道它引用了该方法的隐式第一个参数,即“this”引用,因此 setter 的实际值存储在第二个参数中。我认为仅调用 Ldarg_1 指令就足够了,这会将第二个参数推入堆栈(最后,在设置器中,我不需要检查“this”引用,因此我不需要对其进行任何操作),但这会导致当我尝试设置该属性的值时抛出 TargetInitationException 。

谢谢你!

.net stack cil arguments ilgenerator

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

linq oneliner用于从IDictionary中删除其键不在另一字典中的元素

我有

IDictionary<string,object> d1;
Dictionary<string, object> d2;
Run Code Online (Sandbox Code Playgroud)

我需要从 d1 中删除 d2 中没有的所有条目。

我知道我可以用 for 循环等来做到这一点,但那是上个世纪的事了;我想把事情做好。

我必须

   d1.Where(x => {return d2.ContainsKey(x.key);});
Run Code Online (Sandbox Code Playgroud)

但不知道下一步该做什么

c# linq dictionary .net-4.0

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