我编写了一个WCF服务,但是存储在Service实现中的数据在调用之间不会持续存在,即使存储在静态变量中也是如此.我能做什么?
服务实现如下:
public class Storage : IStorage
{
protected static object[] _data;
#region IStorage Members
public void Insert(object[] data)
{
lock (_data)
{
_data = _data.Concat(data).ToArray();
}
}
public object[] SelectAll()
{
lock (_data)
{
return (object[])_data.Clone();
}
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
服务主机是一个控制台应用程序:
static void Main(string[] args)
{
ServiceHost serviceHost =
new ServiceHost(typeof(TimeSpanStorage));
serviceHost.Open();
Console.WriteLine("Service running. Please 'Enter' to exit...");
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud) 使用函数,可以使用Ajax,PHP,MySQL和一些HTML/CSS调用div-popover并填充动态数据.一切都很好.
当我想要删除列表中的一个条目时,只需弹出它就可以正常运行.当我发送我的列表的更新请求时,它也按照我想要的方式发送.但是,当我delete(); update();在彼此之后立即调用我的第一个函数时会以某种方式被跳过.
当我alert()'s在两个函数中放置时,我看到两个函数都被执行了,脚本通过我的ajax函数,PHP ajax处理程序运行良好,并将结果返回给用户,并且所有警报都进展顺利!
所以我的问题是,我的功能太快了吗?或者我在这里缺少什么导致非删除?
解决方案我已经搬到了update后调用线xmlHttp.resonseText的delete功能.以这种方式,第二个函数调用在第一个函数完成后执行.谢谢大家!
我需要以编程方式将文件和元数据一起添加到文档库和事件处理程序中.我在异步"ItemAdded"和"ItemUpdated"事件中使用以下代码:
SPFile destFile = web.Files.Add(newUrl, newFile, true);
SPListItem destItem;
if (destFile.Item != null)
{
destItem = destFile.Item;
}
else
{
destItem = list.Items.Add(folderUrl, SPFileSystemObjectType.File);
}
foreach (DictionaryEntry property in properties)
{
destItem.Properties[property.Key.ToString()] = property.Value;
}
destItem.Update();
Run Code Online (Sandbox Code Playgroud)
但是,每次添加文件时,都会创建两个版本,一个在调用Files.Add方法时创建,另一个在调用SPListItem.Update方法时创建.还有另一种方法可以在这里创建一个版本吗?
提前致谢!
我什么都不知道Web服务,我只是想调用一些由wsdl描述的"isAlive"服务.
在我看来这似乎不应该超过2-5行代码,但我似乎找不到任何东西,只有大量长的例子涉及第三方包等.
有人有什么想法吗?如果它总是被认为是长的可能是一个很好的解释,为什么它必须如此复杂也将不胜感激.我正在使用Eclipse,而wsdl是SOAP.
我收到此错误:
表dbo.AccountGroup中的关联引用了未映射的类:System.String
这是我的实体:
public class AccountGroup
{
public virtual int Id { get; private set; }
public virtual string Name { get; set; }
public virtual string Parent { get; set; }
public virtual string Description { get; set; }
public virtual IList<Account> Accounts { get; set; }
public AccountGroup()
{
this.Accounts = new List<Account>();
}
}
public class Account
{
public virtual int Id { get; private set; }
public virtual string Code { get; set; }
public virtual …Run Code Online (Sandbox Code Playgroud) 我在服务器和客户端之间的通信中使用WCF(都是用C#编写的).
在释放模式下,时间应设置为~20秒,但在调试模式下,我想将它们设置为更高的值,以便我可以调试/插入代码而不会发生超时.
我知道我可以通过修改app.config文件来更改超时.但是,我有两个不同的绑定和4个超时值,所以我不得不在几个地方改变,它很容易忘记.
为了解决这个问题,我想在我的代码中有一个小的#if DEBUG-section,它以编程方式将超时值更改为1小时.
我尝试使用以下代码执行此操作:
Configuration configuration =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ServiceModelSectionGroup serviceModel =
ServiceModelSectionGroup.GetSectionGroup(configuration);
BindingsSection bindings = serviceModel.Bindings;
foreach (var configuredBinding in bindings.WSHttpBinding.ConfiguredBindings)
{
configuredBinding.CloseTimeout = new TimeSpan(0, 30, 0);
configuredBinding.OpenTimeout = new TimeSpan(0, 30, 0);
Run Code Online (Sandbox Code Playgroud)
但*Timeout属性是readonly所以我得到编译错误.
我不喜欢以编程方式从头开始创建绑定的想法.如果我更改了app.config中的一些属性,我必须记住在代码中进行相同的更改,以确保调试行为类似于发布行为(超时除外).
怎么办呢?
写入文本文件时,某些file.write实例后面跟着输出文件中的换行符,而其他实例则没有.我不希望,除非我告诉他们发生的换行符.码:
for doc,wc in wordcounts.items():
out.write(doc) #this works fine, no linebreak
for word in wordlist:
if word in wc: out.write("\t%d" % wc[word]) #linebreaks appear
else: out.write("\t0") #after each of these
out.write("\n") #this line had mixed spaces/tabs
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
更新
我应该从代码粘贴到SO中获取线索.由于某种原因,最后一行中有空格和制表符的混合,因此在TextMate中,它在视觉上出现在"for word ..."循环之外 - 但是解释器将其视为该循环的一部分.将空格转换为制表符解决了这个问题.
感谢您的输入.
我们在Web应用程序中使用母版页,doctype在母版页中定义.
在其中一个页面上,我需要更改doctype,否则第三方控件的呈现方式不正确.
如何在不影响其余页面的情况下更改该特定页面的文档类型?
在一个特定的单元测试中,我试图多次引发一个事件,然后在最终事件被引发之后通知一个属性值.我有类似的东西
public void TurnRight()
{
var mockFoo = new Mock<IFoo>();
SomeService someService= new SomeService ();
someService.Foo= mockFoo.Object;
mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);
mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);
mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);
mockFoo.VerifySet(foo=> foo.Orientation = Orientation.West);
}
Run Code Online (Sandbox Code Playgroud)
方向实际上只改为东方(因为我相信这个事件只会被提升一次).难道我做错了什么?这是我第一次使用moq,所以我可能会遗漏一些东西.
干杯J
编辑...我应该使用的正确代码
public void TurnRight()
{
var mockFoo = new Mock<IFoo>();
SomeService someService= new SomeService ();
someService.Foo= mockFoo.Object;
mockFoo.SetupProperty(foo=> foo.Orientation);
mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);
mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);
mockFoo.Raise(foo=> foo.TurnedRight += null, EventArgs.Empty);
Assert.AreEqual(mockFoo.Object.Orientation, Orientation.South);
}
Run Code Online (Sandbox Code Playgroud) 我知道linq2db4o可以实现以下功能
from Apple a in db
where a.Color.Equals(Colors.Green)
select a
Run Code Online (Sandbox Code Playgroud)
然而,我需要的是允许我有条件地构建我的查询(就像我可以在其他linq变体中)
public IEnumerable<Apple> SearchApples (AppleSearchbag bag){
var q = db.Apples;
if(bag.Color != null){
q = q.Where(a=>a.Color.Equals(bag.Color));
}
return q.AsEnumerable();
}
Run Code Online (Sandbox Code Playgroud)
在现实世界的情况下,搜索包将拥有许多属性并构建一个巨大的if-tree,捕获所有可能的填充属性组合将是疯子的工作.
可以先打电话
var q = (from Color c in db select c);
Run Code Online (Sandbox Code Playgroud)
然后从那里继续 但这并不是我想要的.
免责声明:近11个月前我的问题几乎重复.
这个更清楚,因为我现在更好地理解了这个问题,我希望现在有些db4o dev眼睛可以抓住这个:
有什么建议?
c# ×5
.net ×2
wcf ×2
ajax ×1
asp.net ×1
db4o ×1
doctype ×1
file ×1
java ×1
line-breaks ×1
linq ×1
moq ×1
performance ×1
persistence ×1
python ×1
sharepoint ×1
soap ×1
timeout ×1
unit-testing ×1
web-services ×1
wss ×1