Tag: #wcf

如何使Windows服务启动为“自动(延迟启动)”

场景: 作为Windows服务运行的WCF服务。 帐户是“用户”。 做了什么: 我已经覆盖了projectinstaller中的OnBeforeInstall,以便能够从配置文件中设置用户名和密码。 我能做什么: 我希望能够将starttype设置为Automatic(Delayed Start) 我试过的: 我把以下的coderow放在重写的OnBeforeInstall中 serviceInstaller1.StartType = ServiceStartMode.Automatic + 1; 想象我会把ServiceStartMode枚举变成代表自动(延迟启动),不起作用。 没有尝试过任何更简单的因为我找不到任何可以尝试的东西。 我在网上发现了什么: 我发现自动(延迟启动)将在.NET 4中可用,但这对我现在没有帮助。 MSDN我发现可以将DelayedAutoStart添加到服务的配置键中,但如果我应该从代码中执行此操作,这感觉就像是一个黑客攻击。 但也许这是目前唯一可用的解决方案? WS2008:启动进程和延迟自动启动 有任何想法吗? 罗伯特佩尔松,瑞典

如何在WCF中向请求添加授权标头?

我正在使用Windows窗体应用程序,并且需要调用WCF服务。 我需要在请求发送到服务之前向请求添加标头(授权 – 自定义)。 我也有一个自定义检查器类。 我尝试了以下但是服务没有被调用,不知何故,它返回一个exception。 public object BeforeSendRequest(ref Message request, IClientChannel channel) { MessageHeader header = MessageHeader.CreateHeader(“Authorization”, “”, “Basic Y19udGk6Q29udGlfQjNTVA==”); OperationContext.Current.OutgoingMessageHeaders.Add(header); HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty(); httpRequestProperty.Headers.Add(“Authorization”, “Basic Y19udGk6Q29udGlfQjNTVA==”); httpRequestProperty.Headers.Add(HttpRequestHeader.UserAgent, “Continental”); OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty; sentMessages.Add(request.ToString()); return null; } 我也尝试过这样一个最简单的方法: MessageHeader header = MessageHeader.CreateHeader(“Authorization”, “”, “Basic Y19udGk6Q29udGlfQjNTVA==”); request.Headers.Add(header); 但它是相同的,添加了授权标题,但它没有到达服务,我怎么知道服务接收到什么标题? 当我在请求中手动添加这样的头文件(运行之前)时,我使用SOAP UI和服务响应很好。

wcf返回一个XmlDocument?

我有一个WCF服务,我使用XmlWriter构建一个XML块。 一旦完成,我想让WCF将其作为XmlDocument返回。 但如果我在[OperationContract]中有XmlDocument它不起作用: [OperationContract] XmlDocument GetNextLetter(); WCF测试实用程序提供: System.Runtime.Serialization.InvalidDataContractException:无法序列化类型’System.Xml.XmlDocument’。

拦截WCF客户端中的消息

有没有人有任何Web服务扩展的经验? 我花时间尝试从MS示例中创建Web服务扩展。 我有一个.net 3.5 Web服务客户端,通过VS IDE“Project> Add Service Reference”添加对WSDL的引用而构建。 这构建了我的Web服务客户端,一切正常。 我需要截取我的Web服务客户端的请求和响应正文。 我发现了许多对Web服务扩展的引用,但是我已经厌倦了攻击,并且无法解决我的扩展问题。 我在这里使用了MS示例“如何实现SOAP扩展”( http://msdn.microsoft.com/en-us/library/7w06t139.aspx ),它为请求/响应流构建了一个记录器。 相关的MS文章“Soap Message Modification”( http://msdn.microsoft.com/en-us/library/esw638yk(VS.85).aspx )展示了如何为Web客户端启用SOAP扩展: 实现SOAP扩展 有两种方法可以在客户端或服务器应用程序上运行SOAP扩展。 首先,您可以配置应用程序以运行扩展。 要将SOAP扩展配置为针对所有Web服务(尤其是vroot)上的所有Web方法运行,请编辑Web.config文件中的 Element部分。 以下代码显示type属性值必须位于一行,并包含扩展的完全限定名称,以及签名程序集的version,culture和public key标记。 在 我已将traceextension编译到自己的类库中,并在Web服务项目的web.config中引用它,如下所示: 没有快乐。 没有记录任何内容,也没有命中断点。 然后我删除了引用的类,并将源代码放入Web服务项目中。 我尝试添加对它的引用(我的命名空间是ServcieTest001): 我使用以下线程作为指南,使我能够扩展“获取-wot-soap-data-from-a-web-reference-client-running-in-asp-net”( http://stackoverflow.com/questions / 300674 / getting-raw-soap-data-from-a-web-reference-client-running-in-asp-net )。 仍然没有快乐。 然后我从上面的线程中复制了代码,当我发出SOAP请求时仍然无法触发扩展。 任何人都可以指向一个function可下载的Web服务扩展演示项目,所以我可以反汇编它,找出我错过的东西?

调用Task.WaitAll()时如何设置任务的用户身份?

我遇到了并行调用WCF服务的问题。 我正在尝试使用Tasks来并行调用两个服务以节省一些时间(我不是试图使这个异步),但我的任务是作为另一个用户运行的。 这两种服务都需要Windows身份validation,并且两次调用都会失败,因为调用该服务的用户没有所需的权限。 调用代码(下面的代码)位于ASP.NET MVC4中的Controller Action内,运行IIS 7.5。 涉及的所有应用程序池都设置为允许ASP.NET模拟并需要Windows身份validation(所有其他方法设置为禁用)。 // Parallel service request to two services Task[] tasks = new Task[2]; // this shows my credentials, eg “MYDOMAIN\\MyUsername” var userMe = System.Security.Principal.WindowsIdentity.GetCurrent().Name; tasks[0] = Task.Factory.StartNew(() => { // this shows “IIS APPPOOL\\DefaultAppPool” var user = System.Security.Principal.WindowsIdentity.GetCurrent().Name; var data = client1.MyMethod(); return data; }); tasks[1] = Task.Factory.StartNew(() […]

识别WCF客户端ID

我有一个WCF Web服务,它公开了几种业务方法。 我还有两个客户端 – 一个asp.net GUI和一个数据迁移应用程序,它们都连接到wcf后端以调用各种业务事务。 我需要我的后端能够识别和区分哪个wcf客户端调用了一些变体逻辑。 有没有办法让我的WCF服务能够识别连接到它的客户端? 还有一种方法可以使用签名密钥来防止客户端欺骗他们的身份吗?

VS2010将System.Xml.XmlElement与System.Xml.Linq.XElement混淆?

我用一个返回System.Xml.XmlElement方法创建了一个WCF服务: 接口: [ServiceContract] public interface IWCFService { [OperationContract] XmlElement Execute(…); } 服务: public XmlElement Execute(…) { XmlNode node = …; return (XmlElement)node; } 当我尝试访问我服务器上部署的服务时 WCFServiceClient service = new WCFServiceClient(“WSHttpBinding_IWCFService”); XmlElement node = service.Execute(…); 我收到错误: 无法将类型’System.Xml.Linq.XElement’隐式转换为’System.Xml.XmlElement’ 搜索我的服务解决方案,我看不到对System.Xml.Linq.XElement任何引用。 期待System.Xml.XmlElement或者VS 2010和我一起System.Xml.XmlElement是不是我错了?

如何在WCF服务中使用IDispatchMessageInspector?

我试图在WCF服务实现中使用IDispatchMessageInspector来访问自定义标头值。 就像是: public class MyService : IMyService { public List GetNames() { var headerInspector = new CustomHeaderInspector(); // Where do request & client channel come from? var values = headerInspector.AfterReceiveRequest(ref request, clientChannel, OperationContext.Current.InstanceContext); } } 我已经实现了自己的IDispatchMessageInspector类。 public class CustomHeaderInspector : IDispatchMessageInspector { public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { var prop = […]

需要C#/ SQL数据库监听器帮助

我需要连续监视数据库行以检查更改(更新)。 如果其他来源有一些更改或更新,应该在我的应用程序上触发事件(我正在使用WCF)。 有没有办法连续监听数据库行以进行更改? 我可能有更多的事件来监视同一个表中的不同行。 在表现方面有任何问题。 我正在使用C#Web服务来监视SQL Server后端。

HTTP请求未经授权使用客户端身份validation方案’Ntlm’。 从服务器收到的身份validation标头是“Negotiate,NTLM”

我查看了大量的SO文章,甚至是其他网站,但似乎无法使这项服务正常运行。 我有一个我想要点击的SOAP服务,它的配置如下: 但是,从我的控制台应用程序中点击它时出现以下错误: HTTP请求未经授权使用客户端身份validation方案’Ntlm’。 从服务器收到的身份validation标头是“Negotiate,NTLM”。 有人可以帮帮我吗?