我讨厌MSDN的WCF RIA服务网站.它没有说它是什么,它只说它做了什么.它说它可以实现什么但不说我为什么需要它.
例如:
"开发n层RIA解决方案时的一个常见问题是协调中间层和表示层之间的应用程序逻辑".
嗯,这对我来说意义不大.
"RIA Services通过提供框架组件,工具和服务来解决这个问题,这些组件,工具和服务使RIA客户端可以使用服务器上的应用程序逻辑,而无需手动复制该编程逻辑.您可以创建一个了解业务规则的RIA客户端并且知道每次重新编译解决方案时,客户端都会自动使用最新的中间层逻辑进行更新."
那么从服务器下载DLL?它是描述数据规则的元数据吗?
那是什么?它只是RAD的VS 2010附加组件吗?或者它是WCF之上或其下的技术还是什么?它在哪里生活?有了数据,还有服务器,什么?
如果你能为我总结一下,我很感激.
我正在尝试使用API控制器在ASP.NET MVC 4 Web应用程序内部工作.但是,每个请求都会导致404,我很难过.:/
我从项目模板定义的标准API控制器路由如下:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
在Global.asax中调用注册:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
// Register API routes
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
我有一个这样的基本API控制器:
namespace Website.Controllers
{
public class FavoritesController : ApiController
{
// GET api/<controller>
public IEnumerable<string> Get()
{
return new [] { "first", "second" };
}
// PUT api/<controller>/5
public void Put(int id)
{ …Run Code Online (Sandbox Code Playgroud) 好的,我的问题非常简单.为什么这段代码不会抛出TaskCancelledException?
static void Main()
{
var v = Task.Run(() =>
{
Thread.Sleep(1000);
return 10;
}, new CancellationTokenSource(500).Token).Result;
Console.WriteLine(v); // this outputs 10 - instead of throwing error.
Console.Read();
}
Run Code Online (Sandbox Code Playgroud)
但这一个有效
static void Main()
{
var v = Task.Run(() =>
{
Thread.Sleep(1000);
return 10;
}, new CancellationToken(true).Token).Result;
Console.WriteLine(v); // this one throws
Console.Read();
}
Run Code Online (Sandbox Code Playgroud) .net c# task-parallel-library cancellationtokensource cancellation-token
我在页面上有两个表单如下:
@using (Html.BeginForm())
{
@Html.ValidationSummary()
@Html.Label("code", "Confirmation Code")
@Html.TextBox("code")
<input type="submit" value="Go" />
}
@using (Html.BeginForm("SendConfirmation", "Auth"))
{
@Html.ValidationSummary()
@Html.Label("email", "Email")
@Html.TextBox("email")
<input type="submit" value="Resend" />
}
Run Code Online (Sandbox Code Playgroud)
如果SendConfirmation抛出错误,则显示2个验证摘要.如何获得验证摘要以定位自己的?
我正在进行WebCrawler 实现,但在ASP.NET Web API的HttpClient中遇到了奇怪的内存泄漏.
所以减少版本在这里:
我发现了问题,并没有HttpClient泄漏.看我的回答.
我添加了dispose没有效果:
static void Main(string[] args)
{
int waiting = 0;
const int MaxWaiting = 100;
var httpClient = new HttpClient();
foreach (var link in File.ReadAllLines("links.txt"))
{
while (waiting>=MaxWaiting)
{
Thread.Sleep(1000);
Console.WriteLine("Waiting ...");
}
httpClient.GetAsync(link)
.ContinueWith(t =>
{
try
{
var httpResponseMessage = t.Result;
if (httpResponseMessage.IsSuccessStatusCode)
httpResponseMessage.Content.LoadIntoBufferAsync()
.ContinueWith(t2=>
{
if(t2.IsFaulted)
{
httpResponseMessage.Dispose();
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine(t2.Exception);
}
else
{
httpResponseMessage.Content.
ReadAsStringAsync()
.ContinueWith(t3 =>
{
Interlocked.Decrement(ref waiting);
try
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(httpResponseMessage.RequestMessage.RequestUri); …Run Code Online (Sandbox Code Playgroud) 好的,你所有的ASP.NET专家:我用反射器来研究ASP.NET Cache实现(它位于HttpRuntime.Cache和HttpContext.Current.Cache)使用Hashtable内部来保持缓存.
但是,数据存储在非托管内存中.这很奇怪,因为我无法看到任何数据存储在非托管内存中.但是,编写一个非常简单的Web应用程序,将一大块字节数组插入缓存中,我们可以看到:

所以基本上我多次调用应用程序(每次增加1000x请求,每个将64KB空缓冲区byte []放入缓存).因此,增长最多的是私有字节(总内存)而不是所有堆中的字节(托管内存).但是我期望托管内存与总内存一致增长,因为我使用Hashtable将对象添加到托管堆.
你能解释一下这种行为吗?
正如Simon所说,所有堆中的字节值仅在垃圾收集后更改 - 我更改了代码以引发垃圾收集并更新计数器.Gen 2堆内存的增加与添加的内存量完全相同.但是,非托管内存仍然高得多.在此示例中,堆2仅为96MB,而总内存为231 MB.

var tasks = new List<Task>();
foreach (var guid in guids)
{
var task = new Task( ...);
tasks.Add(task);
}
foreach (var task in tasks)
{
task.Start();
Task.WaitAll(task);
}
Run Code Online (Sandbox Code Playgroud)
这是UI线程的运行.我需要一个接一个地执行任务变量中的所有任务.问题是如果我调用Task.WaitAll(任务),UI冻结.如何在不冻结UI的情况下执行以下逻辑?
除了可能在表中的行数之外,这些示例查询中的一个会比另一个更昂贵吗?
SELECT * FROM dbo.Accounts WHERE AccountID IN (4,6,7,9,10)
SELECT * FROM dbo.Accounts WHERE AccountID NOT IN (4,6,7,9,10)
Run Code Online (Sandbox Code Playgroud) 在我的HTTP API中,其中一个端点应返回一个随机生成的值,该值将与端点的经过身份验证的调用方关联.目前,我有以下结构:
GET http://example.com/random-ticket HTTP/1.1
Authorization: Basic base64-encoded-basic-auth-value
Accept: application/json
Host: example.com
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: application/json; charset=utf-8
Date: Thu, 03 Oct 2013 07:25:56 GMT
Content-Length: 59
{"user-ticket":"Pfa42634e-1a2e-4a7d-84b9-2d5c46a8dd81"}
Run Code Online (Sandbox Code Playgroud)
发出GET请求以检索随机值.但是,HTTP GET调用应该是幂等的,我的上述实现不符合该规则.另一方面,我不确定是否可以使用空消息体发出HTTP POST请求.
HTTP书执行此类操作的正确方法是什么?
如果我输入 http://localhost:50070或 http://localhost:9000查看节点,我的浏览器没有显示我认为它无法连接到服务器.我用这个命令测试了我的hadoop:
hadoop jar hadoop-*test*.jar TestDFSIO -write -nrFiles 10 -fileSize 1000
Run Code Online (Sandbox Code Playgroud)
但也没有工作,它试图连接到服务器,这是输出:
12/06/06 17:25:24 INFO mapred.FileInputFormat: nrFiles = 10
12/06/06 17:25:24 INFO mapred.FileInputFormat: fileSize (MB) = 1000
12/06/06 17:25:24 INFO mapred.FileInputFormat: bufferSize = 1000000
12/06/06 17:25:25 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 0 time(s).
12/06/06 17:25:26 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 1 time(s).
12/06/06 17:25:27 INFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 2 time(s).
12/06/06 17:25:28 INFO ipc.Client: …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×3
asp.net-mvc ×2
asp.net ×1
caching ×1
hadoop ×1
heap ×1
http ×1
memory ×1
memory-leaks ×1
performance ×1
rest ×1
ria ×1
sql ×1
sql-server ×1
task ×1
wcf ×1
web ×1