Tag: #wcf

从异步WCF双工调用更新asp.net页面 – 对象范围 – ASP.NET

我有以下疑问。 我有一个页面“MyPage”,我在页面类中声明了很少的字典对象。 我怀疑是 如果我将字典声明为私有非静态对象,我无法在该页面类中的函数中使用它(该对象被取消) 但是,如果我声明字典是静态的,我可以跨越函数跨越对象。 但是,对于现在打开页面的所有用户,该对象是否相同(猜测每个用户将依次拥有该页面的实例具有页面类的实例,并且类的静态变量在所有实例中都是不变的class级) 我的理解是对的吗? 如何声明对象在页面类中的所有函数中可用,并且对于页面的每个实例(用户)都是唯一的。 UPDATE1 好吧,我发现页面类中字典对象的初始化是在不同的线程中完成的(WCF Duplex回调)。 但是在主页面线程中,字典对象仍然保持为null(未初始化)。 有任何想法吗? UPDATE2 编组 – 任何机会都有用吗? UPDATE3 回复约翰 – 感谢您的回复。 我现在面临的问题是将数据从客户端的WCF回调类(将在单独的线程中调用)传递到asp.net页面。 那我该怎么做呢? 查看状态可以帮助我跨请求保留数据。 但是当服务器调用回调通知更改时,我应该如何将更改(数据)传递给UI线程(asp.net页面)?

如何将SignalR添加到我的WCF服务和MVC 4客户端应用程序?

我正在使用WCF服务为ASp.net MVC 4客户端应用程序开发项目。 我在MVC中创建了一个控制器并在其中添加了一个视图。 而且,我通过ajax和jquery从视图传递数据。来自服务的响应,结果数据值存储在一个html元素中。就像我实现的那样。一部分已经完成。第二部分是 我有想法在WCF和MVC4服务中添加functionok SignalR? 我认为SignalR是一个自托管? 我如何在WCF和MVC4中为signalR创建一个api。我的代码是。 MVC控制器: – using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVC4.Controllers { public class SampleController : Controller { public ActionResult Index() { return View(); } } } 视图:- @{ Layout = null; } Index $(document).ready(function () { var u = $(“.user”); var l […]

WCF服务和添加自定义Identity声明

我创建了一些声明并附加了它们的线程,然后我想访问操作契约GetCurrentUser(); 用户电子邮件声明始终返回null。 问题出在哪儿? 使用本地IIS和绑定类型的WCF是wsHttpBinding。 自定义validation器; public class UserValidator : UserNamePasswordValidator { public override void Validate(string userName, string password) { if (userName == null || password == null) { throw new ArgumentNullException(); } if (userName == password) { var claims = new List { new Claim(ClaimTypes.Name, “AbbA”), new Claim(ClaimTypes.Email, “foo@bar.com”), new Claim(ClaimTypes.Role,”Customer”) }; var id = […]

WcfFacility Sequence不包含任何元素

在尝试安装我的wcf服务时,我不断得到一个Sequence包含无元素错误。 这是我的global.asax中的代码: _container = new WindsorContainer(); _container.Register(Component.For().Instance(_container)) .AddFacility() .Install(Configuration.FromAppConfig()) .Install(FromAssembly.InDirectory(new AssemblyFilter(HttpRuntime.BinDirectory, “Web*.dll”))); 这是web.config中的system.servicemodel部分: 这是我的城堡配置(在web.config中): 我错过了一些明显的东西吗 更新: 这是堆栈跟踪: [InvalidOperationException: Sequence contains no elements] System.Linq.Enumerable.Single(IEnumerable`1 source) +371 Castle.Facilities.WcfIntegration.WcfClientExtension.ObtainServiceContract(ComponentModel model, IWcfClientModel clientModel) in c:\TeamCity\buildAgent\work\a19756d977ce9d2c\src\Castle.Facilities.WcfIntegration\Client\WcfClientExtension.cs:239 Castle.Facilities.WcfIntegration.WcfClientExtension.ResolveClientModel(ComponentModel model) in c:\TeamCity\buildAgent\work\a19756d977ce9d2c\src\Castle.Facilities.WcfIntegration\Client\WcfClientExtension.cs:234 Castle.Facilities.WcfIntegration.WcfClientExtension.Kernel_ComponentModelCreated(ComponentModel model) in c:\TeamCity\buildAgent\work\a19756d977ce9d2c\src\Castle.Facilities.WcfIntegration\Client\WcfClientExtension.cs:189 Castle.MicroKernel.ComponentModelDelegate.Invoke(ComponentModel model) +0 Castle.MicroKernel.DefaultKernel.AddCustomComponent(ComponentModel model, Boolean isMetaHandler) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\DefaultKernel.cs:281 Castle.MicroKernel.DefaultKernel.Register(IRegistration[] registrations) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\DefaultKernel.cs:536 Castle.Windsor.WindsorContainer.Register(IRegistration[] registrations) in […]

通过工作线程的异步接口使用WCF服务,如何确保从客户端“按顺序”发送事件

我正在编写一个Silverlight类库来抽象到WCF服务的接口。 WCF服务提供集中式日志记录服务。 Silverlight类库为日志记录提供了简化的类似log4net的接口(logger.Info,logger.Warn等)。 从类库我计划提供选项,以便记录的消息可以在客户端上累积并以“突发”forms发送到WCF日志记录服务,而不是在发生时发送每条消息。 一般来说,这很有效。 类库确实累积了消息,它确实将消息集合发送到WCF日志记录服务,在这里它们由底层日志记录框架记录。 我目前的问题是消息(来自具有单个线程的单个客户端 – 所有日志记录代码都在按钮单击事件中)在日志服务中变得交错。 我意识到至少部分原因可能是由于WCF日志服务的实例化(PerCall)或同步。 但是,似乎我的消息发生得如此迅速,以至于异步调用中留下的消息的“爆发”实际上是以与生成它们不同的顺序“离开”客户端。 我试图设置一个生产者消费者队列,如此处所描述的那样稍微(或应该是“轻微的”空中引号)改变Work方法阻塞(WaitOne)直到异步调用返回(即直到执行异步回调) 。 这个想法是当一个消息突发发送到WCF日志记录服务时,队列应该等到该突发被处理后才发送下一个突发。 也许我想做的事情是不可行的,或者我正在努力解决错误的问题,(或者我可能只是不知道我在做什么!)。 无论如何,这是我的生产者/消费者队列代码: internal class ProducerConsumerQueue : IDisposable { EventWaitHandle wh = new AutoResetEvent(false); Thread worker; readonly object locker = new object(); Queue<ObservableCollection> logEventQueue = new Queue<ObservableCollection>(); LoggingService.ILoggingService loggingService; internal ProducerConsumerQueue(LoggingService.ILoggingService loggingService) { this.loggingService = loggingService; worker = new Thread(Work); worker.Start(); } […]

如何从IErrorHandler生成HTTP 403等效的WCF消息?

我想编写一个IErrorHandler实现来处理AuthenticationException实例(一种专有类型),然后在ProvideFault的实现中提供一个传统的Http Response,其状态代码为403作为故障消息。 到目前为止,我有一个最好的猜测连接到服务,但WCF似乎完全忽略输出消息,即使正在调用error handling程序。 目前,代码如下所示: public class AuthWeb403ErrorHandler : IErrorHandler { #region IErrorHandler Members public bool HandleError(Exception error) { return error is AuthenticationException; } public void ProvideFault(Exception error, MessageVersion version, ref Message fault) { //first attempt – just a stab in the dark, really HttpResponseMessageProperty property = new HttpResponseMessageProperty(); property.SuppressEntityBody = true; property.StatusCode = System.Net.HttpStatusCode.Forbidden; […]

从WCF服务调用基于任务的异步单向回调方法

我有一个WCF服务,它使用回调合同来通知客户端,类似于此 public interface IClientCallback { [OperationContract(IsOneWay = true)] void NotifySomething(); } 和调用它的服务代码类似于此 void NotifySomething() { try { this.callback.NotifySomething(); } catch (Exception ex) { // Log the exception and eat it } } 请注意,根据设计,回调通知是可选的 ,即很好,但不是必需的。 这就是为什么它被标记为OneWay并且实现吃exception。 由于一些误解,我们认为这对于拥有一个非阻塞的火灾和忘记方法就足够了。 但当然这不是真的,所以在某些情况下它会阻塞一段时间,这会导致问题,因为它是从内部线程同步块调用的。 因此,我们决定通过更改定义使其异步,如下所示 public interface IClientCallback { [OperationContract(IsOneWay = true)] Task NotifySomething(); } 我对客户端实现没有问题,我的问题是如何从服务中调用它。 这是我正在考虑的事情 async void NotifySomething() { try […]

在.NET 3.5中使用WCF DataContractJsonSerializer

我正在尝试使用ASP.NET MVC 2站点中的地理编码代码。 不幸的是,一些代码,特别是DataContractJsonSerializer的使用,只能通过.NET 4.0实现 。 由于我的托管服务提供商不支持.NET 4,我不得不在.NET 3.5中实现该function。 我如何重新编写代码(我在下面重新发布)在.NET 3.5中工作? Google Maps Geocoding API也可以返回XML,如果在3.5中更容易序列化… 下面是我试图从.NET 4转换为.NET 3.5的代码: using System; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.Net; using System.Web; . . . private static GeoResponse CallGeoWS(string address) { string url = string.Format( “http://maps.google.com/maps/api/geocode/json?address={0}&region=dk&sensor=false”, HttpUtility.UrlEncode(address) ); var request = (HttpWebRequest)HttpWebRequest.Create(url); request.Headers.Add(HttpRequestHeader.AcceptEncoding, “gzip,deflate”); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; […]

显示所有messageHeader的值

我想知道显示所有MessageHeaders服务器端的最佳方法是什么。 实际上我唯一知道的方法如下: OperationContext.Current.IncomingMessageHeaders.GetHeader(Name, Namespace) 该方法仅适用于已知的MessageHeader,但我想在循环中显示它们的值。 谢谢

WCF – 实现需要加密一个soap:body元素的客户端,怎么做?

我一直在寻找这一点,到目前为止它看起来并不乐观,试图编写一个消耗第三方服务的客户端应用程序(下面的示例请求,来自Java客户端)。 一个问题是它期望身体中的一个元素被加密。 理想情况下,这将是一个WCF解决方案,虽然我已经阅读了一些关于使用WSE1 / 2/3接近这一点的地方(因为WSE停滞不是真的很想),有没有人必须解决这类问题? 2010-11-23T16:17:36Z 痛点是soap:Body中的authPwd元素,感谢任何见解