是否有理由让每个WCF服务调用异步?
我和我的伙伴正在讨论这个问题.他想让每个WPF服务调用Async以避免锁定UI(它是桌面WPF应用程序).我反对这个想法.在大多数情况下,我不认为需要异步调用,并且在需要时,应该专门编码RequestingClass和DataManager来处理异步调用.
我的论点是,为所有事情设置回调的代码要多得多,而且非常令人困惑.我也认为这可能会导致性能下降,尽管我尚未对此进行验证.他的论点是,有时候你会收到大量数据并且会锁定用户界面,并且设置这样的WCF调用并不是那么多工作(他也没有发现下面的代码令人困惑).
我们之前从未使用过WCF服务器,所以我想我会给他带来疑问,并在这里询问其他一些意见.
例如:
我的方式:
public override User GetById(int id)
{
return new User(service.GetUserById(id));
}
Run Code Online (Sandbox Code Playgroud)
它锁定UI,UserDataManager和WCF服务通道,直到WCF服务器返回User DataTransferObject,但它易于理解并快速编码.它将用于大多数WCF服务调用,除非它实际上预期获取数据的延迟,在这种情况下DataManager将被设置为处理异步调用.
他的方法:
public override void GetById(int id, Action<UserGroup> callback = null)
{
// This is a queue of all callbacks waiting for a GetById request
if (AddToSelectbyIdQueue(id, callback))
return;
// Setup Async Call
var wrapper = new AsyncPatternWrapper<UserDTO>(
(cb, asyncState) => server.BeginGetUserById(id, cb, asyncState),
Global.Instance.Server.EndGetUserById);
// Hookup Callback
wrapper.ObserveOnDispatcher().Subscribe(GetByIdCompleted);
// Run Async Call
wrapper.Invoke();
}
private void GetByIdCompleted(UserDTO dto)
{
User user = …Run Code Online (Sandbox Code Playgroud) 在php中运行长进程时,如何防止浏览器超时?
我们有一个进程接受文件上传并对文件数据运行进程.有时这个文件可能非常大,有很多记录,在这些情况下,用户会收到超时错误.我相信它是浏览器超时,因为脚本仍在后台运行并成功完成.
我通常不在PHP中工作(实际上,从未在对此网站进行故障排除之前)并且想知道是否有一种简单的方法可以防止浏览器在进程运行时超时.
我正在尝试创建一个具有只读Id字段的类,但是当对象通过WCF服务器时,我在保留值时遇到问题.
我无法[DataMember]在公共属性上设置属性,因为没有set方法,并且我希望尽可能保持这种方式,因为我不希望通过外部方式更改此值.我无法[DataMember]在私有字段上设置该属性,因为它在部分信任环境中引发错误.
public class MyClass
{
private int _id;
public int Id
{
get { return _id; }
}
private string _otherProperties;
[DataMember]
public string OtherProperties
{
get { return _otherProperties; }
set { _otherProperties = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在通过WCF服务器时保持Id字段的值而不公开我的属性?
我如何告诉WCF服务在将数据传回客户端时要使用哪些KnownType?
我知道我可以使用该[ServiceKnownType]属性,这使得服务调用从WCF测试服务器运行良好,但它仍然从客户端失败.我在这里错过了什么吗?
[OperationContract]
[ServiceKnownType(typeof(SubClassA))]
[ServiceKnownType(typeof(SubClassB))]
BaseClassZ GetObject();
Run Code Online (Sandbox Code Playgroud)
来自客户端的错误消息是:
{"元素'http://schemas.datacontract.org/2004/07/BaseClassZ'包含映射到名称'http://schemas.datacontract.org/2004/07/SubClassA'的类型的数据.反序列化器不知道映射到此名称的任何类型.考虑使用DataContractResolver或将与"SubClassA"对应的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将其添加到已知类型列表中传递给DataContractSerializer."}
使用DataContractSerializer和KnownTypes列表序列化/反序列化WCF服务器上的对象可以正常工作.
更新:如果我将KnownType属性添加到基类,我似乎可以让客户端正确读取对象,但我仍然在寻找解决方法,如果可能的话,因为基类用于很多项目而且我不喜欢我想在添加新项目时随时修改基类的KnownType属性.
[DataContract]
[KnownType(typeof(SubClassA))]
[KnownType(typeof(SubClassB))]
public class BaseClassZ
{
...
}
Run Code Online (Sandbox Code Playgroud) 是否可以在样式中定义ResourceDictionary?
例如,假设我想为StackPanels设置两种不同的样式,并且在一种情况下,我希望所有按钮都是蓝色,另一种我希望它们是红色.这可能吗?
就像是
<Style x:Key="RedButtonsPanel" TargetType="{x:Type StackPanel}">
<Setter Property="Orientation" Value="Horizontal" />
<Setter Property="StackPanel.Resources">
<Setter.Value>
<ResourceDictionary>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red" />
</Style>
</ResourceDictionary>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
上面的代码失败了,关于Setter的Property值的错误不能为null(即使它显然不是null).
我可以做点什么
<ResourceDictionary x:Key="RedButtons">
<Style TargetType="{x:Type Button}">
<Setter Property="Width" Value="100" />
<Setter Property="Background" Value="Red" />
</Style>
</ResourceDictionary>
<StackPanel Resources={StaticResource RedButtons} />
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否有办法将ResourceDictionary合并到样式中.
我一直在使用EntityFramework查看很多WCF示例,其中大多数似乎都会向客户端返回某种POCO或DTO类.
我想知道为什么这是因为默认EntityObject包括[DataContract]属性和实现INotifyPropertyChanged.返回DTO或POCO课程比EntityObject(或反之亦然)更好吗?是否有特定的情况,最好使用一个返回值而不是另一个?
在我的旧XP计算机上,从Visual Studio运行XBAP会在Google Chrome中打开它.我切换到Windows 7,现在运行XBAP下载文件就像是ZIP或EXE而不是在浏览器中打开它.同样的事情发生在FireFox中.
有谁知道为什么我突然下载文件而不是打开它?我怎么解决它?
是的,我知道XBAP并不适合在Chrome上运行,但是如果你将一堆FireFox dll复制到Google\Chrome\Application目录,那么它运行得很好(如果有人想要,可以在此处执行).
甚至在我进行设置之前,它仍然会尝试在chrome中打开xbap,我可以将URL复制到IE进行测试.现在它下载文件,所以我甚至不能这样做.
我正在尝试将更改从DatabaseA复制到DatabaseB,但我不确切知道这些更改是什么.
是否有一个SQL脚本可以找到数据库之间不同的对象,然后生成一个脚本来更新DatabaseB以匹配DatabaseA?
我正在使用SQL 2005,我不想丢失DatabaseB中的现有数据
我确定我在这里遗漏了一些东西.
我有这样的数据集:
FK RowNumber Value Type Status 1 1 aaaaa A New 1 2 bbbbb B Good 1 3 ccccc A Bad 1 4 ddddd C Good 1 5 eeeee B Good 2 1 fffff C Bad 2 2 ggggg A New 2 3 hhhhh C Bad 3 1 iiiii A Good 3 2 jjjjj A Good
我想查询前3个结果并将它们作为列进行透视,因此最终结果集如下所示:
FK Value1 Type1 Status1 Value2 Type2 Status2 Value3 Type3 Status3 1 aaaaa A New bbbbb B Good ccccc A Bad 2 fffff …
我想为基于HTML5应用程序框架的iPhone和Androids创建一个HTML5应用程序.该应用程序只会监控设备的网络活动(仅限蜂窝而非WIFI).
我几个小时以来一直在寻找如何做到这一点,但未能找到如何做到这一点,或者即使有可能.
是否有可能在基于HTML5应用程序框架构建的HTML5应用程序中监控iPhone/Androids网络活动?如果是这样,怎么样?
(我更愿意找到一个框架,将iPhone和Androids的网络数据使用暴露给应用程序,而不是在可能的情况下编写自己的代码)