Tag: #wcf

在WPF中调试未处理的exception

我有一个复杂的WPF应用程序,用于某种PA系统。 它会不时地显示video,有时它会在屏幕上播放音乐和不同的文字信息。 结构很简单。 有一个服务器有2种方法。 SetMessage( “字符串”); 和GetMessage(“String”); 客户端在5秒内通过WCF上的HTTP绑定连接到服务器并提取GetMessage()。 Admin app连接到服务器并调用SetMessage()。 在App.xml.cs中,我有一个处理程序,用于CurrentDomain_UnhandledException,OnDispatcherUnhandledException,TaskScheduler.UnobservedTaskException和application.Current.DispatcherUnhnandledException。 所有人都假设要做nlog并继续操作。 应用程序中有一个页面使用Media元素播放短video。 播放video后不时发生应用程序崩溃。 EventType : clr20r3 P1 : Client.exe P2 : 0.0.2.0 P3 : 5226863e P3 : mscorlib P5 : 4.0.0.0 P6 : 4ba1da6f P7 : 219 P8 : 10 P9 : system.invalidoperaionexception 现在这一切都很酷。 然而问题是: 尽管有4个不同的exception处理程序,我仍然在寻找exception 我无法在客户端计算机上进行调试 错误是随机的,但在我播放video后发生。 用于停止和启动video的代码位于Dispatcher.Invoke(新操作)中。 在停止播放video之前,我可能会离开页面并切换到另一个页面。 看起来我只是违反了一些访问并尝试从另一个线程中更改代码中的内容。 有趣的是,我试图做ILDasm并找到P7:219并且代码中没有。 有没有什么办法可以捕获那个怪异的例外? (我实际上花了大约30分钟,试图在这里找到任何类似的问题,但我的代码中已经应用了所有解决方案) […]

在双向通信中,WCF中的MSMQ可以处理客户端的防火墙问题吗?

我打算在客户端和服务器之间使用MSMQ进行双向通信。 客户端将是一个托管在Window服务中的WCF,并通过Internet与服务器通信。 显然我无法控制客户端的防火墙,代理,NAT, 所以我想知道设置MSMQ netMsmqBinding的正确方法是什么? 现在我的intiial测试我在同一台PC上运行服务器和客户端,我正在设置绑定如下 但我感觉这在通过互联网部署时不起作用,因为“localhost”不会转换为机器地址(更不用担心NAT转换)而且该端口,ICMP流量可能被客户端防火墙阻止。 处理这个问题的正确方法是什么? 我看到了公共和私人队列,我们​​必须设置。但我不知道我是否在服务器上为消息队列设置公共队列然后它将工作与否。 所以只要告诉我什么时候win表格wcf客户端应用程序将运行然后如何打开我的自定义端口,如“6667”,并指导我什么库或我应该使用什么方法作为结果响应应该来自客户端路由器到PC和防火墙不会阻止任何事情。 请用现实生活场景讨论这个问题,人们如何处理现实生活中的这种情况。 注意:如果您对服务器和客户端之间的双向通信有任何其他想法,请告诉我 谢谢

使用Web Service避免线程的并行(异步)任务

我有一项并行执行的任务; 例如,打印用户选择的文件异步。 一种方法可能是使用工作线程。 但是考虑到成千上万的请求涌入Web服务器的情况,以及应用程序产生的另一个线程用于打印声音可怕。 如果所有并发用户都开始打印怎么办? 所以我想避免工作线程的原因。 为了解决这个问题,我已经将代码移到了Web服务中; 我正在调用PrintAsync()方法,并且我订阅了OnPrintComplete以获得通知。 现在我可以发送尽可能多的打印件而不用担心asp.net线程饥饿或阻塞请求。 我知道Web服务在内部使用线程,但那是IOCP线程,这意味着它不会打扰asp.net工作线程。 我想不出可能的缺点 ,除了它将是一个Web服务。 这是一个好方法吗? 什么是处理此function的更好的 替代版本?

基于证书的身份validation的基础

我搜索了很多,并找到了很多关于如何在wcf中实现基于证书的身份validation的答案。 但我的问题与其基本原理有关。 在生产中实施基于证书的身份validation时,客户端是否提供了服务器需要在其受信任的人员存储中添加的证书? 或者服务器提供证书(由服务器签名)。 我想在配置wcf服务器时,我们只需配置证书位置和存储。 我们永远不会将它与任何域绑定。 因此,出示此证书的任何客户都可以访问我的服务。 如果证书需要绑定到域。 他们为什么不能只允许来自该域的所有请求。 当客户端调用wcf服务时,它会显示其证书。 该证书是否只带有公钥? 并且这个证书可以被窃取(因为它在网络上传播)并被黑客用来使用Web服务。 我知道ssl如何炒作。 在ssl的情况下,浏览器负责所有这些东西但是在wcf服务的情况下(当我们只想允许特定客户端访问我们的服务时)如何管理它。 提前致谢。 让我简单一点: 我想创建一个Web服务,我希望三个客户端(A,B和C)可以使用它。 我想通过证书validation这三个客户端。 在设置时,这些客户是否需要将证书发送给我。 或者我必须为他们创建证书? 客户端是否也会共享他们的私钥(在设置时) 我是否需要将这些证书放入受信任的人员商店? 当他们请求Web服务时,他们将出示他们的证书(仅限公钥)。 如果他们只使用公钥呈现,黑客可以窃取此公钥并请求我的网络服务。 我的web服务如何区分黑客/实际客户端。

OutOfMemoryException,堆栈大小很大,线程数量很大

我正在分析我的.net Windows服务。 我试图发现OutOfMemoryException并发现我的堆栈大小很大并且正在增长,因为线程数量不断增长。 每个线程在Windows x64计算机上获得1024 KB 。 因此,当我的应用程序有754个线程时,堆栈大小将为772 MB 。 对我来说问题是我不知道这些线程来自哪里。 最初我的应用程序的线程数量非常有限,并且随着时间的推移不断增长。 我有两个怀疑 – 这些线程是由WCF或数据库连接创建的。 我的应用程序使用WCF和数据集。 此外,我试图在Ants do Trace中配置我的应用程序,我可以看到大量的System.ServiceModel.Channels.ClientReliableDuplexSessionChannel ,这个数字随着时间的推移而增加。 我可以看到创建了数千个这样的对象。 所以我想知道的是谁创建线程(发现工具,分析器)以及创建这些线程的WCF是谁。 UPDATE 我已经在调试器中停止了我的应用程序来查看线程。 我只能看到大量带有调用堆栈的Win32线程 ntdll.dll!7c82860c() [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] ntdll.dll!7c827d99() kernel32.dll!77e4e02f() mscorwks.dll!79e7c7a8() mscorwks.dll!79f943fe() mscorwks.dll!79f94237() mscorlib.ni.dll!792f5577() mscorlib.ni.dll!792e01c5()

为什么WCF合同包含ref / out参数?

我正在查看其他人的WCF服务合同,并注意到它正在使用out参数: client.SomeMethod(parameter1, parameter2, out someOutParameter); 是否有充分的理由使用out参数而不是将其添加到响应中? 编辑 这是代理生成的: public string CreateItem(string contract, string note, out string warning) 现在如果他们需要返回一个字符串并且还有一个警告,我通常会看到它: public class CreateItemResponse { public string Result { get; set; } public string Warning { get; set; } } 我只是好奇,如果有一个很好的理由不这样做,并使用返回的字符串和字符串作为out参数。

具有WS-Security的WCF客户端

我需要实现一个满足以下SOAP消息示例的WCF客户端: 444561ee-277f-77b2-c664-7a9923jfgh1b f68e6ff9-74f7-4022-8618-ec2cf0ee4b6a 4523394 johndoe 2012-06-26T16:18:15.185Z 2012-06-26T16:18:45.185Z 72214255 MIICMzCCAZygAwIBAgIET1e+dDANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQGEwJDQTEQMA4GA1UECBMHT250YXJpbzENMAsGA1UEChMET0hJUDEVMBMGA1UECxMMUmVnaXN0cmF0aW9uMRcwFQYDVQQDEw4xNDIuMTQ1LjcwLjE3NzAeFw0xMjAzMDcyMDAwNTJaFw0xMzAzMDcyMDAwNTJaMF4xCzAJBgNVBAYTAkNBMRAwDgYDVQQIEwdPbnRhcmlvMQ0wCwYDVQQKEwRPSElQMRUwEwYDVQQLEwxSZWdpc3RyYXRpb24xFzAVBgNVBAMTDjE0Mi4xNDUuNzAuMTc3MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCs/JIP6CE5IkfTnD/c56K+QAYqETdLvW1xXJ6ipkVhjjC2ASKuuH4fvhbyxo2B4VugsL9r4E5jHEKoi+GDKOLlLZRfSy0cB8IcpXonAuGqMzhCoEQ1CdxNb9etMyvQGRKEBgniKKxTvpTyZdpYDi92up5E+FYL3jEejhp+1iDFJQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAHn8VZS169BJMa4E6SNLnY7u80zSh90mbrTUWjM1dEicv3jQMMsrWHfoCt+nRSqfNLUTLc8U0LqiB3jnnNJgJt1T7Sp8eUZPdH0gY3i83ZXA8HDFKMZF3qL8I8ncu8FPcZGYBNhYrGjXXsuqXimiTIjxgm06ErRa/51szOFFxWrB FkhA37COGmsKeEH50LAGhKntvRpD0+xOGsGzXAV210k= RA1O1voUNDV9+hi6IzNNxkTHfEdu2pu6fppiwN23JGI= 3vVj2VEbLKEvGy4yt7k8i2BeWUOaCygnFMduT7EyP3A= yFOmFgMDHMBooWIEsB3azib2EX7fR+Ich03J19kFMVE= zoxMcAQ2WLBIir333NJk52r4axwznflX+KxMQTPFvfQ= HmOiZS4gZbxv07+sLjyi7Vfg3Rfpvr3IVnaHfRp4aKvg5yBFlLocPIYwhUhmCCs1LXrJxR0hsbe0K2sz3ML5hH+PDEGetlPKSN9R1x9K95w7V1JQcTUULiVgNGLCfxgFV2HNy1iNvlTc7COS+7w4xSgsY4KlVgrBw0T1srhHpUA= 00123 CL 我得到的最相似的是使用以下绑定配置和自定义绑定更改来包含UserNameSecurityTokenParameter: 这是我用来添加UsnerNameSupportingToken的代码: public static Binding AddUserNameSupportingTokenToBinding( Binding binding ) { var elements = binding.CreateBindingElements( ); var security = elements.Find( ); if ( security != null ) { var tokenParameters = new UserNameSecurityTokenParameters( ); tokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient; tokenParameters.RequireDerivedKeys = […]

基本身份validation和WCF

我正在努力学习WCF,但我真的不明白我必须做什么。 我有一个包含用户名和密码的数据库,用户在使用该服务之前应该进行身份validation。 目前,用户名和密码是硬编码的: class UsernameAuthentication : UserNamePasswordValidator { /// /// When overridden in a derived class, validates the specified username and password. /// /// The username to validate.The password to validate. public override void Validate(string userName, string password) { var ok = (userName == “test”) && (password == “test”); if (ok == false) throw new […]

配置服务引用… – 对象引用未设置为对象的实例

我正在使用Visual Studio 2013 , .NET4.5 。 最初我是WCF服务消费者,但由于缺乏处理子系统的团队资源,我接管了WCF服务双方的开发。 所以我得到了我需要调用的WCF服务的代码,现在尝试将其插入以在本地系统上调试它。 问题:我需要调用的服务在localhost上工作正常我可以获取wsdl并浏览到它。 但是,当我尝试在Visual Studio 2013 “配置服务引用…”并尝试将URL从开发服务器更改为本地时,它给出了Object reference is not set to an instance of an object错误Object reference is not set to an instance of an object 。 有没有人经历类似的事情? 是什么造成的? 我如何解决它?

WCF 设置/获取未执行

我对WCF有点新意,我认为我完全不了解DataContracts的交易。 我有这个’RequestArray’类: [DataContract] public class RequestArray { private int m_TotalRecords; private RequestRecord[] m_Record; [System.Xml.Serialization.XmlElement] [DataMember] public RequestRecord[] Record { get { return m_Record; } } [DataMember] public int TotalRecords { get { return m_TotalRecords; } set { if (value > 0 && value <= 100) { m_TotalRecords = value; m_Record = new RequestRecord[value]; for (int […]