构建应用程序时,它通常部署在不同的环境(test,dev,prod)中,因此端点地址正在发生变化.由于ServiceReferences.ClientConfig是作为Silverlight的.xap文件的一部分构建的,因此在构建解决方案后很难更改端点,这通常是通过web.config完成的.
我已经搜索了很多,但是我无法弄清楚这里的最佳做法是什么,所以我的问题是:
在Silverlight中进行动态wcf端点地址配置时,最佳做法是什么?
为了澄清,根据应用程序所在的服务器(test,dev,prod),端点会发生变化:
<endpoint
name="MyService"
address="http://testserv/MyService.svc"
binding="basicHttpBinding"
bindingConfiguration="MybasicHttpBinding"
contract="MyApp.MyService"
/>
<endpoint
name="MyService"
address="http://prodserv/MyService.svc"
binding="basicHttpBinding"
bindingConfiguration="MybasicHttpBinding"
contract="MyApp.MyService"
/>
Run Code Online (Sandbox Code Playgroud)
在某种程度上,我需要Silverlight客户端知道使用哪一个,具体取决于它在哪个服务器上/哪个构建编译.
TFS源控制下的2个项目.
DependancyProject.sln
AppProject.sln
使用AppProject引用DependancyProject.
-
我遇到的问题是AppProject中的Installer项目.它将DependancyProject.dll作为"引用"(?),它试图将其包含在GAC中.
当我尝试构建这个项目时,要创建一个MSI来安装App,我就会收到错误
The item $/Assemblues/DependancyProject/bin/debug/DependancyProject.dll is locked for check-out by USER in workspace HIS-PC-NAME.
Run Code Online (Sandbox Code Playgroud)
(有问题的PC没有死,没有使用)
检查到Source Control中的dll(据我所见).当我浏览它时,它所引用的路径不存在(没有bin文件夹).
DependancyProject几乎被Source Control中的每个项目引用,我从来没有遇到任何问题.它构建,所有其他项目构建.只有这一个安装程序项目没有.
我无法理解为什么它还需要尝试修改它.所有它需要做的(我假设)是复制它.
这里有什么想法?
我有一个Silverlight应用程序,它使用操作从模型中获取数据(再次从WCF服务获取数据).
我需要以某种方式同步两个ActionCallbacks,或等待它们,然后执行一些代码.
例:
_model.GetMyTypeList(list =>
{
MyTypeList.AddRange(list);
});
_model.GetStigTypeList(list =>
{
StigTypeList.AddRange(list);
});
doSomethingWhenBothHaveReturned();
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用计数器来记录已经返回的数量,但有没有更好的方法来做到这一点?
编辑: user24601有一个很好的答案,但CountdownEvent不存在silverlight,任何其他伟大的想法?:)
我最近一直在查看应该是一个安全的iPhone应用程序用于工作相关任务的流量,我注意到该应用程序在与后端通信时不使用任何形式的会话ID /令牌.每个请求都包含用户名,密码和设备ID,所有流量都通过https发送.这是一个宁静的api,所以没有状态服务器端.
我真的觉得这是一个坏主意,但我不能提出太多好的理由来解释原因.
如果您是中间人攻击的受害者,攻击者在大多数情况下可以在您登录时找到您的密码,因为需要将用户名和密码发送到服务器以获取会话ID /令牌.
更好的方法可能是发送用户名,时间戳和时间戳和密码的哈希值.如果时间戳为x秒,则此服务器将丢弃请求,并且不必通过线路发送明文密码.
但是,我看过的大多数应用程序(除了那些使用誓言等等)只是以明文(通过https)发送用户名和密码来获取令牌.每次启动应用程序时都会发生这种情况(用户名和密码都存储在应用程序数据中).
正如主题所说,如果使用https,为什么从移动/网络应用程序发送用户名和密码到后端api是一个坏主意?
我试图where column in (collection)使用以下方法从表中删除行:
public void DeleteRows(int parentId, List<int> years)
{
var yearsAsCommaSeperatedString = ListToCommaSeperatedString(years);
const string query = "DELETE FROM TABLE t WHERE t.PARENT_ID=:Parent AND t.YEAR in(:yearList)";
Session
.CreateSQLQuery(query)
.SetParameter("Parent", parentId)
.SetParameter("yearList", yearsAsCommaSeperatedString)
.ExecuteUpdate();
}
private static string ListToCommaSeperatedString(IEnumerable<int> ints)
{
var aggregate = ints.Aggregate("", (current, i) => current + (i + ", "));
return aggregate.Substring(0, aggregate.LastIndexOf(",", StringComparison.Ordinal));
}
Run Code Online (Sandbox Code Playgroud)
问题是这yearsAsCommaSeperatedString是一个字符串,因此db无法解释它的数字.我也尝试添加整数列表作为参数,但NHibernate不知道如何处理它.
我如何使用where in(collection)CreateSQLQuery?
我想在html 5画布中制作一个"蛇"游戏.但我有一个问题让蛇向正确的方向移动.我假设下面的代码会使蛇在0度和180度上水平移动,而在90度和270度上垂直移动,但情况并非如此.我在这做错了什么?(使用向左和向右箭头进行导航).
function move(direction) {
if(direction == left) {
angel = (angel - 5) % 360;
if(angel < 0) angel += 360;
} else if (direction == right) {
angel = (angel + 5) % 360;
}
x = x + Math.floor(Math.cos(angel*0.0174532925)*5);
y = y + Math.floor(Math.sin(angel*0.0174532925)*5);
$("#infoBar").html("Direction: " + direction + " angel: " + angel);
drawPoint(x,y);
}
Run Code Online (Sandbox Code Playgroud)
乘数当然是辐射度.但不知何故,270度并不是一条直线,正如我所想的那样.我究竟做错了什么?