我在类似聊天的应用程序上工作,我在客户端使用Silverlight,在服务器端使用wpf.现在通信基于套接字:我有不同的消息类,我通过TCP序列化和发送.
我开始意识到为每个可能的通信场景创建一个单独的消息类是一个相当大的开销,并考虑转移到WCF.
因此,我需要了解以下事项:
似乎使用WCF的整个通信基于来自我的WCF服务的客户端callind公开的方法.有没有办法知道哪个客户端调用某种方法?这对我的应用来说非常重要.
当客户端从服务器断开连接(例如关闭运行Silverlight客户端的浏览器窗口)时,WCF是否通知我的应用程序?这也非常重要.
方法调用是完全异步的吗?如果是这样,我是否必须将每个方法调用重新路由到服务器应用程序的主线程?
每个客户端连接都有自己的线程吗?如果客户端调用方法说每2秒,服务器(在合理供电的PC上运行)可以处理多少个同时连接?我只需要一个估计(10,100,1000甚至更多)."更多"会很棒;)
也许我完全错了,WCF完全没有基于连接的工作.然后我必须找到一个解决方法来仍然管理活动连接列表.
谢谢你的帮助!安德烈
我理解将所有表示元素保留在标记之外并将它们放入外部.css文件的概念.
我想了解一下你使用样式属性与设置ID和外部Css的合理使用情况.
到目前为止,我已经使用了很多样式属性,我通常使用它来指定特定于该元素的表示项,以及用于所有元素的任何内容,我将其引入外部css文件但是我想重新评估我的位置和做出最好的选择.
我正在构建一个基本的CRUD库,我期望在本地(添加引用)和wcf(添加服务引用)环境中使用它.
CRUD设置的Create,Uupdate和Delete部分(具有更复杂的业务规则)的最佳返回类型是什么?
我希望能够最大限度地减少线路上的来回,但我也希望为我的客户提供有关何时操作失败我的业务逻辑但在技术上有效的有意义的信息(因此它不是例外).
举个例子,CRUD用于Person类,它包含以下字段:FirstName,MiddleName LastName和Brith的Date.首先,最后和DOB是必需的,但中间则不是.
我应该如何将业务逻辑的失败传达给客户?IE"您必须为FirstName指定一个值."
所以我最近看到了几个提到代理键的提示,我不确定它是什么以及它与主键的区别.
我总是认为ID是我在这样的表中的主键:
Users
ID, Guid
FirstName, Text
LastName, Text
SSN, Int
Run Code Online (Sandbox Code Playgroud)
但是,维基百科将代理键定义为"数据库中的代理键是建模世界中的实体或数据库中的对象的唯一标识符.代理键不是从应用程序数据派生的."
根据维基百科,看起来ID是我的代理键,我的主键可能是SSN + ID?这是正确的吗?这是一个糟糕的桌子设计吗?
假设表格设计合理,那么这样的表格是不是很糟糕,对于一个数据没有任何独特之处的表格呢?
LogEntry
ID, Guid
LogEntryID, Int [sql identity field +1 every time]
LogType, Int
Message, Text
Run Code Online (Sandbox Code Playgroud) 使用Guid(UniqueIdentifier)作为Primary/Surrogate Key列或序列化的"identity"整数列是否更好; 和为什么它更好?在哪种情况下你会选择一个而不是另一个?
我在表中存储了"用户"列表.应用程序的业务逻辑将引用一个对象,该对象包含此表中当前登录用户的所有数据.并且如果用户具有正确的访问权限,则能够允许用户执行操作.
我想知道存储"访问级别"的最佳方法是什么?
我想要存储访问级别的一种方式是整数,并且使用C#"flags"来组合多个访问级别而不需要一堆字段,这是明智的吗?
Create = 1
Read = 2
Update = 4
Delete = 8
FullAcc = 16
Run Code Online (Sandbox Code Playgroud)
我正在考虑的另一个选择,感觉不那么优雅,但我已经看到它做了很多:
Read/Write = 1
R/W + Delete= 2
Full Access = 3
Run Code Online (Sandbox Code Playgroud)
我想知道的原因是,在第二种方法中添加其他项似乎更简单,但在某些时候,维护它会变得很麻烦.你的想法是什么?
通过这个链接,我知道GUID不如聚簇索引好,但它可以在任何地方唯一创建.它是一些高级SQL Server功能(如复制等)所必需的.
如果我想将GUID列作为典型的主键,它被认为是糟糕的设计吗?这也假设我的聚类ID有一个单独的int标识列,另外还有一个"用户友好"ID?
更新
在查看您的反馈后,我意识到我并没有真正说出我的问题.我知道一个Guid会产生一个好的(即使是它的过度杀伤力)PK,但是一个糟糕的聚类索引(通常).更直接问我的问题是,添加第二个"int identity"列作为聚类索引是不是很糟糕?
我认为Guid将是PK并使用它来构建所有关系/连接等.然后我不会使用自然键进行群集索引,我会添加一个不是特定于数据的附加"ID".我想知道的是那么糟糕吗?
我理解Enums如何在C#中工作,我得到了Flags属性带给表的内容.
我在这里看到了这个问题.推荐第一种口味,但没有提供任何理由/理由.
这两个定义的方式有什么不同,一个比另一个好吗?使用第一个synax代替第二个synax有什么好处?在定义Flags类型Enums时,我总是使用第二种风格......我一直都在做错吗?
[Serializable]
[Flags]
public enum SiteRoles
{
User = 1 << 0,
Admin = 1 << 1,
Helpdesk = 1 << 2
}
Run Code Online (Sandbox Code Playgroud)
那是不一样的
[Serializable]
[Flags]
public enum SiteRoles
{
User = 1,
Admin = 2,
Helpdesk = 4
}
Run Code Online (Sandbox Code Playgroud) 有没有办法调整WPF UserControl的大小,使子控件不会失败?
我有这个故事板:
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Height" Storyboard.TargetName="MyUserControl" To="145" From="0" Duration="0:0:1" />
</Storyboard>
Run Code Online (Sandbox Code Playgroud)
这很好用; 它取决于我从高度零到高度145的控制 - 问题是随着高度属性的变化,我怀疑,由于它们的HorizontalAlignment和VerticalAlighment属性,内部的所有子控件开始跳转.有没有办法可以在动画结束前禁用它?
我试图创建这个UserControl"幻灯片"进入视图的错觉 - 所以如果我发生错误,我会对其他方法持开放态度.
我正在尝试创建一个不使用VS2010中的自动生成文件的wpf项目,我认为它可以帮助我更好地理解,所以我希望这听起来不是超级原始的问题.
无论如何,在将xaml文件及其代码放在例如myWindow.xaml和myWindow.xaml.cs之后,我还创建了App.xaml及其代码.
在我运行代码并收到此消息之前,事情似乎还可以:
'test1.exe'不包含适用于入口点的静态'Main'方法
这是我到目前为止:
<Application x:Class="test1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="myWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
namespace test1
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
public App()
{
InitializeComponent();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后有
<Window x:Class="test1.myWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
>
<Grid>
</Grid>
</Window>
namespace test1
{
/// <summary>
/// Interaction logic for myWindow.xaml
/// </summary>
public partial class myWindow : Window
{
public myWindow()
{
InitializeComponent();
}
}
}
Run Code Online (Sandbox Code Playgroud)
可能是由于这里生成了错误的BAML文件?因为Main()通常在构建过程中被放置.