我目前正在使用接口中定义的大量方法的WCF服务.这些方法中的大多数是简单的CRUD操作,使用实体框架有一些逻辑,并且可以很容易地分成功能区域.只有一个文件接近1K行代码,我想将其拆分以保持可维护性.我正在考虑以下事项:
此外,按功能区域划分,还是通过CRUD方法(组合在一起,共同创建等)会更好.
在处理WCF服务时,这必然是一个非常常见的问题.组织WCF服务方法的好方法是什么?
更新
最后,我决定将服务调用传递给内部静态类.
在我的WPF应用程序中,我需要并行运行2个长时间运行的任务,这两个任务都返回需要在UI中显示的数据.
我的视图模型中有一个名为IsBusy的属性,在两个任务完成之前都应该为true.
如何在2个长时间运行的任务完成后收到通知?
我不想使用Task.WaitAll,因为它会阻止我的UI线程.我不想使用ContinueWith链接任务,因为我希望这些长时间运行的任务并行运行.
SyntaxHighlighter具有允许通过双击选择代码的功能。如何禁用此功能?
我正在尝试进行一个查询,我将一个文本列(包含一个整数作为文本)转换为Int32.这是查询:
SELECT VALUE t FROM MyEntities AS t WHERE CAST(t.TextColumn AS Edm.Int32) > 5
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个带有以下消息的System.Data.EntitySqlException:
找不到类型'Edm.Int32'.确保加载了所需的模式,并正确导入名称空间.近类型名称,第1行,第75列.
根据MSDN,Edm.Int32应该是有效类型.
有谁知道什么是错的?
编辑:
经过一些试验和错误,我发现以下工作:
SELECT VALUE t FROM MyEntities AS t WHERE CAST(t.TextColumn AS System.Int32) > 5
Run Code Online (Sandbox Code Playgroud)
MSDN中的示例是错误的吗?我觉得我在这里错过了一些东西......
我有一种情况,我需要有大量(数百)队列,其中的项目应按顺序处理(需要单线程消费者).我的第一个实现,基于示例,我使用单个长时间运行的Task per BlockingCollection来使用队列项.但是,我最终得到了一个拥有数百个线程的应用程序,这些线程大部分都处于空闲状态,除了占用内存之外什么都不做
我认为只有在队列中有东西需要处理才能运行消费者任务会更好,但是,我无法找到能够提供最佳实践的样本.
我提出了类似于下面的解决方案.但问题是,每个项目都会产生一个新任务(这可能是效率低下的?浪费资源?).但是如果我没有为每个项目创建一个新任务,我不能保证一个项目不会在未处理的队列中.
private object _processSyncObj = new object();
private volatile bool _isProcessing;
private BlockingCollection<string> _queue = new BlockingCollection<string>();
private void EnqueueItem(string item)
{
_queue.Add(item);
Task.Factory.StartNew(ProcessQueue);
}
private void ProcessQueue()
{
if (_isProcessing)
return;
lock (_processSyncObj)
{
string item;
while (_isProcessing = _queue.TryTake(out item))
{
// process item
}
}
}
Run Code Online (Sandbox Code Playgroud)
针对这种情况的最佳实践/最佳解决方案是什么,并保证项目在队列中没有任何情况,但没有消费者在运行?
我正在编写一个Asp.net代码,用于在从数据库中获取视频后在网站上播放视频.代码给出错误";预期"我试图找到我错过的地方,但我不能.请帮我解决它.在第8行给出错误,即string text = "<embed src="" + Str + "" height="300" width="500" />"; 这里是代码
protected void Page_Load(object sender, EventArgs e)
{
string play = Request.QueryString["id"];
string strSQL = "select * from videos where videosong_loc='" + play + "'";
SqlConnection sconn = new SqlConnection(@"Data Source=Khawaja\\SQLEXPRESS;Initial Catalog=TaskDB;Integrated Security=True;");
SqlCommand scomm = new SqlCommand(strSQL, sconn);
sconn.Open();
SqlDataReader sreader = scomm.ExecuteReader();
if (sreader.Read())
{
string Str = "videos\\" + sreader[1].ToString();
string text = "<embed src="" + Str + "" height="300" width="500" />";
//string text …Run Code Online (Sandbox Code Playgroud)