Tag: wcf

将MSMQ端到端跟踪与WCF跟踪和应用程序级日志logging相关联

背景: 我正在解决WCF通过事务性MSMQ(使用netMsmqBinding)发送的消息似乎消失的问题。 使用WCF的代码是在我无法更改的第三方程序集中。 我对这个问题有什么线索,但是计划启用各种跟踪function,以便找出问题所在。 语境: 我已启用MSMQ 端到端跟踪 。 它为发送的每个消息logging两个事件。 将消息写入传出队列时的一个事件。 该消息包含MSMQ消息ID(由guid和整数组成,即7B476ADF-DEFD-49F2-AF5A-0CF27C5152C0 \ 6481271)。 当该消息通过networking发送的另一个事件。 我已经启用了详细的WCF跟踪 。 我也有应用程序级日志logging,logging应用程序代码定义的消息ID(我们称之为“应用程序消息ID”)。 我已经对发送的MSMQ消息启用了正面和负面的源日志logging。 我已在接收队列上启用日记function。 问题: 当消息丢失时,我知道丢失消息的应用程序ID(它由发送端logging)。 现在我想查看一下End-to-End跟踪来查看消息是否写入了发送队列。 如何将端到端跟踪中的事件与应用程序级日志和WCF跟踪相关联? 思路: 在System.Messaging中使用受pipe理的MSMQ API发送MSMQ消息时,消息的MSMQ标识在消息发送后可用。 但是,当WCF执行发送操作时,我还没有findlogging此方法的方法。 WCF跟踪logging了一个MSMQMessageId guid,但是这个值令人惊讶的不像我猜测的那样是实际的MSMQ id。 是否有可能访问实际的MSMQ消息ID并logging它? 将本机线程ID与应用程序级别ID和时间戳一起logging在应用程序日志中。 本机线程ID由MSMQlogging到端到端跟踪,因此这可能实际上足以关联。 如果我没有find一个更优雅的解决scheme,这是我的计划B.

用户/通过使用RESTful WCF和Windows窗体的身份validation

为Windows Forms应用程序与IIS托pipe的RESTful WCF服务交谈实施授权/身份validation的最佳方法是什么? 我问的原因是我很困惑,筛选了不同的文章和职位expression不同的方法,并最终在WCF安全最佳实践“( http://www.codeplex.com/WCFSecurityGuide )上达到约650页的文档我是根据我的情况,只是不确定哪种方法是最好的,以及如何开始实施。 我从本文开始使用“使用WCF 3.5devise和构buildREST风格的Web服务”( http://msdn.microsoft.com/zh-cn/library/dd203052.aspx )以及REST风格的WCF服务上的PDCvideo。很棒,帮助我实现了我的第一个REST友好的WCF服务, 我有了服务工作后,我回到了实施安全,见。 “安全注意事项”(页面上的四分之一),并试图按照说明实现一个HTTP授权标头,但是我发现代码是不完整的(请参阅UserKeysvariables从未声明)。 这是我试图研究更多关于如何做到这一点(使用HMAC哈希与“授权”HTTP标头,但在谷歌上找不到多less?),这导致我到其他文章有关消息级别的安全性,形成authentication和自定义validation器,坦率地说,我不确定哪个是现在采取的最好和最合适的方法。 所以所有这些(并感谢听到直到现在!),我想我的主要问题是, – 我应该使用哪种安全实施? – 有没有办法避免每个WCF调用发送用户名/密码? 如果在开始时已经build立了一个连接,我宁愿不发送这些额外的字节,这将在login之后允许进行后续的呼叫。 – 如果我使用SSL,是否真的应该关心纯文本? 如上所述,.NET 3.5 win表单应用程序,IIS托pipe的WCF服务,但是重要的是我希望任何和所有的WCF服务都需要这个授权过程(不过它应该是会话,http头或其他),因为我不希望任何人都能够从networking上获得这些服务。 我知道上面的post很大,但我不得不expression我已经倒闭的路线,我需要完成的任何和所有的帮助,我非常感激。 PS:我也知道这篇文章如何使用WCF使用用户名/密码+ SSLconfiguration安全的REST风格的服务,如果社区build议我离开REST的WCF服务,我可以做到这一点,但是我开始保持一致任何公共的API来。 我认为这是很重要的,我说我如何访问我的WCF服务(联系服务正在工作,但什么是validation凭据 – 然后返回成员对象的最佳方式? WebChannelFactory<IMemberService> cf = new WebChannelFactory<IMemberService>( new Uri(Properties.Settings.Default.MemberServiceEndpoint)); IMemberService channel = cf.CreateChannel(); Member m = channel.GetMember("user", "pass"); 从MS文章(和我自己的一些testing)实施的一半代码: public Member GetMember(string username, string password) { if […]

你在你的WCF Web服务中使用枚举types吗?

我听到一些人说,枚举是邪恶的,不应该在Web服务中使用,因为如果分配了一些值,或者如果枚举被标记为Flags属性,则服务器和客户端之间可能会出现不匹配。 他们还表示,暴露枚举的Web服务更难维护,但不能真正给我可行的论据。 所以根据你的经验,在WCF Web服务中使用枚举有什么优缺点?

WCF错误:“X.509证书CN =本地主机链build设失败…”

我试图让我的WCF客户端和服务器互相通话时出现此错误。 X.509证书CN = localhost链式构build失败。 使用的证书具有无法validation的信任链。 replace证书或更改certificateValidationMode。 证书链已处理,但终止于不受信任信任的根证书。 如果我closuresSSL证书,一切正常。

为什么WCF这么重要,在什么情况下使用?

我在某种程度上理解它可以帮助应用程序沟通,而不pipe它们的位置。 为什么它很重要,现实世界中使用WCF的例子是什么?

REST风格的Web服务主体格式

我是WCF新手。 我正在做一些简单的RESTful WCF操作合同。 而且,我有一个关于属性类“WebInvoke”的属性“BodyStyle”的选项的问题。 一个选项是WebMessageBodyStyle.Bare,另一个是WebMessageBodyStyle.Wrapped。 我应该什么时候使用裸? 我应该什么时候使用Wrapped? 感谢您的帮助。

使用Visual Studio 2013在C#中创build一个asmx Web服务

HY, 我如何在Visual Studio 2013中创build一个asmx Web服务? 我已经find了这个简短的教程,但是当我在Visual Studio 2013中遵循这个,我得到一个错误,说“无法创buildtypes'Service1'”。 感谢帮助 :)

提琴手不嗅探来自ASP.NET网站的SOAPstream量

到目前为止,我已经成功地使用fiddler从testing装置,控制台应用程序和Web项目中嗅探Web服务stream量。 今天我注意到,如果我正在运行我的Web应用程序(这是一个ASP.NET网站,本地托pipe在IIS上),我不能再嗅探那种stream量。 我看到所有的本地stream量,但Web服务stream量刚刚消失(服务正在打,因为我看到debugging到代码的响应)。 我仍然能够在相同的解决scheme(完全相同的环境)中成功地嗅探testing装置或控制台应用程序中的肥皂请求和响应。 如果它是一个Windows(我在Win7上)安全更新或喜欢它永远不会工作我猜(除非它只影响通过IIS路由stream量)。 我应该寻找什么可能导致这种行为的出现 ? 任何指针赞赏! 注意 : 我可以看到本地stream量 ,但不能看到本地没有托pipe的Web服务的SOAP请求/响应(这是另一个团队提供的沙箱) 编辑 :这一点的configuration做了诡计(在Rick Strahl的博客上find) <system.net> <defaultProxy> <proxy usesystemdefault="False" bypassonlocal="True" proxyaddress="http://127.0.0.1:8888"/> </defaultProxy> </system.net>

WCF停止响应约10左右的电话(节stream)

我有一个WCF服务和一个带有服务引用的应用程序,在应用程序中我有一个循环,每次迭代都会调用这个wcf web服务中的方法。 问题是,大约9个电话后,它只是停止…,如果你打VS的Pausebutton,你会看到它卡在线路,它打电话。 等待一段时间后,这个TimeoutException被抛出: 请求通道在00:00:59.9970000之后等待回复时超时。 增加传递给请求调用的超时值或增加绑定上的SendTimeout值。 分配给此操作的时间可能是更长时间的一部分。 我研究了一下,发现了一些解决scheme,包括在应用程序中编辑app.config,这里是它的摘录: <serviceBehaviors> <behavior name="ThrottlingIssue"> <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" /> </behavior> </serviceBehaviors> 。 <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 然后,在停止debugging之后,几分钟后,popup错误消息,告诉我发生了灾难性故障 。 我该如何解决这个问题? 当我使用正常的Web服务时,我没有这个问题。 作为参考,这里是整个app.config : <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="ThrottlingIssue"> <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" /> </behavior> </serviceBehaviors> </behaviors> <bindings> <wsHttpBinding> <binding name="WSHttpBinding_IDBInteractionGateway" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" […]

WCF – 故障/exception与消息

我们目前正在辩论是否最好在WCF通道上抛出错误,而不是传递一个消息来指示服务的状态或响应。 故障来自WCF的内置支持,您可以使用内置的error handling程序并作出相应的反应。 但是,这会带来开销,因为在.NET中抛出exception可能会非常昂贵。 消息可以包含必要的信息,以确定您的服务调用发生了什么,而不会引发exception的开销。 然而,它需要几行重复的代码来分析消息并确定其内容之后的动作。 我们试图创build一个可以在我们的服务中使用的通用消息对象,这就是我们想到的: public class ReturnItemDTO<T> { [DataMember] public bool Success { get; set; } [DataMember] public string ErrorMessage { get; set; } [DataMember] public T Item { get; set; } } 如果我所有的服务电话都返回这个项目,我可以持续检查“成功”属性,以确定是否一切顺利。 然后在事件中出现错误消息string,表示出错了,如果需要的话,包含Dto的通用项目。 exception信息必须logging到中央日志logging服务,而不是从服务传回。 思考? 注释? 想法? build议? 在我的问题上进一步澄清 我遇到的问题是交stream业务规则。 就像,如果有人login,他们的帐户被locking,我该如何沟通? 他们的login显然失败,但由于“帐户locking”的原因而失败。 我也是: A)使用布尔值,抛出带locking消息帐户的Fault B)返回AuthenticatedDTO与相关信息