我发现Visual Studio WCF测试客户端在快速测试我的WCF服务时非常有用.这是相对于Visual Studio安装目录在此位置找到的测试客户端:
\ Common7\IDE\WcfTestClient.exe
我有一些服务调用需要System.Int32 []类型的参数
我似乎无法弄清楚要为此参数输入什么值,因为我一直收到错误
'[输入的值]'不是此类型的有效值
试图输入值27我尝试了以下,但都失败了
27
{27}
新的System.Int32 [] {27}
任何人都可以帮助如何做到这一点
我们目前正在讨论是否最好通过WCF通道抛出故障,而不是传递指示服务状态或响应的消息.
故障来自WCF的内置支持,您可以使用内置的错误处理程序并做出相应的反应.然而,这会带来开销,因为在.NET中抛出异常可能会非常昂贵.
消息可以包含必要的信息,以确定服务调用发生的情况,而不会产生抛出异常的开销.但是,它确实需要几行重复代码来分析消息并确定其内容后面的操作.
我们开始创建一个可以在我们的服务中使用的通用消息对象,这就是我们想出的:
public class ReturnItemDTO<T>
{
[DataMember]
public bool Success { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public T Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我的所有服务调用都返回此项,我可以一直检查"成功"属性以确定是否一切顺利.然后我在事件中有一个错误消息字符串表示出现了问题,如果需要,我还有一个包含Dto的通用项.
必须将异常信息记录到中央记录服务,而不是从服务传回.
思考?评论?想法?建议?
对我的问题进一步澄清
我与错误合同有关的一个问题是沟通业务规则.
比如,如果有人登录,并且他们的帐户被锁定,我该如何沟通呢?他们的登录显然失败了,但由于"帐户锁定"的原因导致登录失败.
我也是:
A)使用boolean,抛出Fault并锁定消息帐户
B)返回AuthenticatedDTO及相关信息
我已经创建了一个WCF服务并且正在使用netMsmqBinding绑定.
这是一个简单的服务,它将Dto传递给我的服务方法,并且不期望响应.该消息放在MSMQ中,一旦被选中插入数据库.
确保没有数据丢失的最佳方法是什么.
我尝试了以下两种方法:
抛出一个例外
这会将消息放入死信队列中以供手动阅读.我的工作开始时我可以处理这个
在绑定上设置receiveRetryCount ="3"
经过3次尝试 - 即时发生,这似乎将消息留在队列中,但是我的服务出错了.重新启动我的服务会重复此过程.
理想情况下,我想做以下事项:
尝试处理消息
我能做到吗?如果是这样的话?你能否指出我有关如何最好地利用WCF和MSMQ为我的给定sceneria的任何好文章.
任何帮助将非常感激.谢谢!
一些额外的信息
我在Windows XP和Windows Server 2003上使用MSMQ 3.0.不幸的是,我不能使用针对MSMQ 4.0和Vista/2008的内置有害消息支持.
我目前正在审查从SVN迁移到SourceGear Vault的好处.有没有人得到建议或链接到两者之间的详细比较?请记住,我必须移动我当前的源代码控制系统,这对SVN有利
这是我迄今为止从我自己的调查中发现的一些信息.
我一直在两者之间进行一些时间测试,并且保险库似乎更快地执行大多数操作.时间测试使用与存储库,同一工作站客户端和同一项目相同的服务器.
时间比较
(无法正确格式化)
我还找到了一个在线资源,比较了其他一些观点.这是我正在寻找的那种信息.
用法比较
Subversion只是编辑/合并/提交.Vault允许您进行编辑/合并/提交或结帐/编辑/签入.
Vault的外观和行为与VSS类似,这使得VSS用户的学习曲线实际上为零.
Vault有一个VS插件,但只有在你要以结账模式运行时它才有效.
Subversion拥有几乎所有可以想象的操作系统的客户端; Vault有一个用于Windows的GUI客户端和一个用于Mono的命令行客户端.
两者都支持远程工作,因为它们都使用HTTP作为传输(Subversion使用扩展DAV,Vault使用SOAP).
Subversion安装,尤其是使用Apache,更复杂.
Subversion有很多第三方支持.保险柜只有几件事.
我的问题
有没有人得到建议或链接到两者之间的详细比较?
我是BlackBerry应用程序开发的新手,并试图制作一个简单的应用程序来打开我的闪光灯作为火炬.我知道有几个应用程序已经这样做了,但我想尝试自己做.
我已经安装了eclipse和所有必要的附加功能以使我的开发环境运行.我还成功创建了股票标准hello world应用程序.
然而,我正在努力寻找如何做到这一点.我一直在阅读API文档并开始玩FlashControl,VideoControl和SnapshotControl.
然而,这些似乎没有公开这样做的方法.
我知道通过摄像机,我可以选择并打开闪光灯,这正是我想模仿的.
我到目前为止使用的代码似乎只是设置相机闪光灯强制打开是:
Player p = javax.microedition.media.Manager.createPlayer("capture://video");
p.realize();
p.start();
FlashControl flashControl = (FlashControl) p.getControl("javax.microedition.amms.control.camera.FlashControl");
flashControl.setMode(FlashControl.FORCE);
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试将我的项目从.NET 3.5升级到.NET 4.0
一切都很顺利,所有代码都编译好,所有测试都通过了.
然后我遇到了部署到我的暂存环境的问题.
突然,我的登录不再有效.
在.NET 4中,我的SHA1哈希密码似乎有所不同.
我正在使用SHA1CryptoServiceProvider:
SHA1CryptoServiceProvidercryptoTransformSHA1 = new SHA1CryptoServiceProvider();
Run Code Online (Sandbox Code Playgroud)
为了测试我创建了一个带有2个控制台应用程序的新Visual Studio项目.
第一个针对.NET Framework 3.5,第二个针对4.0.
我在两者中都运行了完全相同的散列代码,并生成了不同的结果.
为什么会发生这种情况?我该如何解决这个问题?
我显然无法更新所有用户密码,因为我不知道它们是什么.
任何帮助将不胜感激.
代码示例
public static class SHA1Hash
{
public static string Hash(string stringToHash)
{
return (Hash(stringToHash, Encoding.Default));
}
public static string Hash(string stringToHash, Encoding enc)
{
byte[] buffer = enc.GetBytes(stringToHash + stringToHash.Reverse());
var cryptoTransformSHA1 = new SHA1CryptoServiceProvider();
string hash = BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer));
return hash;
}
}
Run Code Online (Sandbox Code Playgroud) (请阅读评论,因为我有一个修复)
嗨,
我创建了一个WCF服务,我在Windows 7上使用.net 4.0在IIS 7.5中托管.
该服务托管在http和net.tcp上.
我已经使用WcfTestClient测试了我的服务,它似乎通过basicHttp和netTcp正常工作.
但是,当我尝试通过我的ASP.NET网站使用此服务时,我在尝试通过nettcp时收到错误
我的客户端点如下所示
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="Generic_HttpBinding" sendTimeout="00:01:00" receiveTimeout="00:01:00" maxBufferPoolSize="2000000" maxReceivedMessageSize="2000000000">
<security mode="None"/>
<readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000"/>
</binding>
</basicHttpBinding>
<netTcpBinding>
<binding name="Generic_Binding" sendTimeout="00:01:00" receiveTimeout="00:01:00" maxBufferPoolSize="2000000" maxReceivedMessageSize="2000000000">
<security mode="None"/>
<readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000"/>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint name="EndPointHttp" address="http://localhost:43/Service/MyService.svc" binding="basicHttpBinding" bindingConfiguration="Generic_HttpBinding" contract="NameSpace.Services.Contracts.IService"></endpoint>
<endpoint name="EndPoint" address="net.tcp://localhost:42/Service/MyService.svc" binding="netTcpBinding" bindingConfiguration="Generic_Binding" contract="NameSpace.Services.Contracts.IService"></endpoint>
</client>
Run Code Online (Sandbox Code Playgroud)
现在我以完全相同的方式调用服务,只需交换我的终点名称
var factory = new ChannelFactory<IService>(SuppliedEndpointName);
factory.Open();
var proxy = factory.CreateChannel();
var result …Run Code Online (Sandbox Code Playgroud)