我在Web应用程序中使用Entity框架.每个请求创建ObjectContext(使用HttpContext),特此代码:
string ocKey = "ocm_" + HttpContext.Current.GetHashCode().ToString();
if (!HttpContext.Current.Items.Contains(ocKey))
{
HttpContext.Current.Items.Add(ocKey, new ElevationEntityModel(EFConnectionString));
}
_eem = HttpContext.Current.Items[ocKey] as ElevationEntityModel;
Run Code Online (Sandbox Code Playgroud)
不是每次都有,但有时我有这个例外:
用户代码未处理System.Data.MappingException消息=类型"XXX"已被多次映射.来源= System.Data.Entity的
我完全糊涂了,我不知道是什么导致了这个问题.
有谁能够帮我?
我处理的项目是Web服务器上托管的Web应用程序调用托管在应用服务器上的WCF服务.WCF调用的代理由ChannelFactory创建,调用通过channel进行,例如:
(省略使用块)
var factory = new ChannelFactory<IUserService>(endpointConfigurationName);
var channel = factory.CreateChannel();
var users = channel.GetAllUsers();
Run Code Online (Sandbox Code Playgroud)
如果我理解的话,通过频道调用是异步的,Web服务器上的线程在请求期间是空闲的,只是等待响应.
我想像这样打电话异步:
var users = await channel.GetAllUsersAsync();
Run Code Online (Sandbox Code Playgroud)
有没有办法如何使用ChannelFactory和通道异步进行调用?我没找到任何.我知道我可以通过svcutil/Add服务引用生成异步方法,但我不想那样做.另外,我不想通过添加异步方法来更改应用服务器(IUserService)上的服务接口.
有没有办法如何使用ChannelFactory调用方法异步?谢谢.
我在C#中有一个带有此返回类型的方法的接口:
Task<(Guid, int)?>
Run Code Online (Sandbox Code Playgroud)
我需要在F#中实现这个接口,如果我没有弄错,这在F#中应该是等价的:
Task<Nullable<ValueTuple<Guid, int>>>
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我编译时,我收到此消息:
generic construct requires that the type 'struct (Guid * int)' have a public default constructor
Run Code Online (Sandbox Code Playgroud)
我发现了一些类似的问题,看起来解决方案是使用[<CLIMutable>]
属性.但这不是我可以用System.ValueTuple做的事情.有没有办法在F#中使用Nullable ValueTuple?
我在 ASP.NET Core 3.1 应用程序中面临处置 IServiceProvider 对象的问题:
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'IServiceProvider'.
Run Code Online (Sandbox Code Playgroud)
我正在类中的方法IServiceProvider
内捕获对象并在. 大多数情况下,这工作正常,但偶尔会被抛出。我可以理解in不应该这样使用。所以我想知道:ConfigureServices
Startup
BackgroundService
ObjectDisposedException
IServiceProvider
ConfigureServices
Dispose/DisposeAsync
召唤IServiceProvider
?什么是ServiceProvider
生命周期?IServiceProvider
在BackgroundService 中引用ASP.NET Core 的正确方法是什么?我应该在那里使用IServiceScopeFactory
并创建新的范围吗?我尝试在内容类型中添加查找字段.Field有这个定义:
<Field ID="{c80e8e3c-7124-4772-a39d-5b69f131d542}"
Name="Site"
Group="Tieto Intranet Columns"
Type="Lookup"
DisplayName="Site"
StaticName="Site"
List="Lists/FavoriteSites"
ShowField="Title"
PrependId="TRUE"
WebId="~sitecollection"
>
Run Code Online (Sandbox Code Playgroud)
我希望通过此查找字段引用的FavoriteSites列表存在于网站集范围内.部署顺利,但是当我使用此查找基于内容类型创建列表时,看起来查找字段未连接到FavoriteSites列表.我将一些数据添加到FavoriteSites中,而不是尝试在FavoriteSites上的查找字段中添加内容到第二个列表中.不幸的是下拉选择,这应该显示我从FavoriteSites列表中的数据是空的.
当我手动为FavoriteSites创建新的查阅列时,一切正常.
有人知道这个查找定义中哪里有问题?
更新:
正如Rich推荐我的那样,我在Verbose上设置日志级别找到这条消息:
无法找到在特征{d86c7005-d31d-43ae-b86b-38f28b81072e}中为字段{c80e8e3c-7124-4772-a39d-5b69f131d542}指定的WebId = ~sitecollection和List = Lists/FavoriteSites属性.设置列表= {39CEC23E-FB28-47B3-BC36-C21780AD1D94}.
我不明白,因为列表收藏网站存在.FavoriteSites列表以及具有"站点"字段的第二个列表由网站集范围上的一个功能部署.
我无法通过GUID在查找中指定列表,因为我不知道部署时间中的guid.
我已经实现了自定义活页夹:
public class CustomModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var modelName = bindingContext.ModelName;
var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);
if (valueProviderResult == ValueProviderResult.None)
{
return Task.CompletedTask;
}
var modelAsString = valueProviderResult.FirstValue;
if (!string.IsNullOrEmpty(modelAsString))
{
// custom login here
}
return Task.CompletedTask;
}
}
Run Code Online (Sandbox Code Playgroud)
以及相应的模型绑定器提供者:
public class CustomModelBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (context.Metadata.ModelType == typeof(CustomModel))
{
return new BinderTypeModelBinder(typeof(CustomModelBinder));
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我已将自定义活页夹提供程序添加到 ModelBinderProviders …
我需要将毫秒转换为GMT日期(在Android应用中),例如:
1372916493000
当我通过此代码转换它:
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT"));
cal.setTimeInMillis(millis);
Date date = cal.getTime();
Run Code Online (Sandbox Code Playgroud)
结果是07:41 07/04/2013
.当我使用时,结果是一样的:
Date date = new Date(millis);
Run Code Online (Sandbox Code Playgroud)
不幸的是结果看起来不正确,看起来像我当地的时间.我尝试通过此服务转换相同的数字,结果是05:41 07/04/2013
,我认为是正确的.所以我有两个小时的差异.任何人都有任何建议/提示我的转换有什么问题?
我有 .NET Core 2.2 应用程序,想使用dotnet-counters来获取一些有关 GC 的数据。不幸的是,由于某种原因,dotnet-counters 看不到我的应用程序(.NET 核心进程)。当我跑步时
dotnet-counters ps
Run Code Online (Sandbox Code Playgroud)
它什么也不返回(我的.NET核心应用程序当然正在运行)。我使用 .NET Core 版本 2.2.8 和 dotnet-counters 版本 3.1.57502。我尝试了应用程序的独立版本和依赖于框架的版本。
我有这种格式的XML:
<element1>
some inner text
<child1>11</child1>
<child2>True</child2>
</element1>
Run Code Online (Sandbox Code Playgroud)
我尝试通过简单的框架将此XML映射到对象上:
@Element(name = "element1")
public static class Something {
@Element(required=false)
public int child1;
@Element(required=false)
public boolean child2;
}
Run Code Online (Sandbox Code Playgroud)
我无法更改XML,我需要在类中的某些字段上映射值"some inner text".不幸的是,我不知道该怎么做(如果可能的话).我试过@Text注释,但它不能和@Element一起用在一个类中.
谢谢你的帮助.
我正在尝试使用HttpClient在F#中发送POST请求.不幸的是,我发现F#中的超时不起作用.我有这样的代码:
let asyncTest() = async {
let httpClient = new HttpClient()
try
let! res = httpClient.PostAsync("http://135.128.223.112", new StringContent("test"), (new CancellationTokenSource(2000)).Token) |> Async.AwaitTask
Console.WriteLine("Test 1")
with
| :? Exception as e -> Console.WriteLine("Test 2")
}
Run Code Online (Sandbox Code Playgroud)
您在代码中可以看到的IP不存在.我希望2秒后取消呼叫(取消令牌),但永远不会抛出异常("测试2"永远不会在屏幕上打印).在PostAsync方法调用之后,程序控制永远不会返回到异步块.如果我使用HttpClient.Timeout属性或Async.Catch而不是try块,行为是相同的.
在C#中,相同的代码按预期工作,引发两秒异常:
private async Task Test()
{
var httpClient = new HttpClient();
await
httpClient.PostAsync("http://135.128.223.112", new StringContent("test"),
new CancellationTokenSource(2000).Token);
}
Run Code Online (Sandbox Code Playgroud)
我知道F#和C#中的异步是不同的所以我希望这是由一些同步问题引起的,死锁......我希望有更深入了解F#async的人可以解释这个并提供解决方法.
更新:我正在开始像这样的F#异步工作:
Async.Start (asyncTest())
Run Code Online (Sandbox Code Playgroud)
我在控制台应用程序中运行此测试,最后我有ReadKey(),因此应用程序不会比异步更快结束.
在评论Fyodor的评论后,我试图将其更改为RunSynchronously.现在引发异常,但我仍然需要它与Async.Start一起工作.
c# ×4
.net ×3
.net-core ×2
asp.net-core ×2
async-await ×2
c#-to-f# ×2
f# ×2
java ×2
android ×1
asp.net ×1
asp.net-mvc ×1
asynchronous ×1
content-type ×1
date ×1
f#-async ×1
generics ×1
lookup-field ×1
sharepoint ×1
valuetuple ×1
wcf ×1