Tag: #wcf

如何编写T4模板以从Entityframework 6创建DTO?

我有一个大型数据库,我在Entityframework中使用数据库优先模型。 它位于Internet服务器上并通过WCF进行通信。 域模型使用所有小写字母作为实体,存储过程和列/属性的名称。 在我的客户端应用程序中,我希望使用标准PascalCase作为命名约定。 T4模板是否可以使用正确的命名约定从Entityframework创建数据传输对象? 如果是这样,有人可以给我一个关于如何写它的起点吗? 为了清楚起见,我不想更改Entityframework生成的任何代码,而是使用Entityframework模型作为对另一个文件的输入添加具有相应CamelCase命名的简单POCO类,然后可以由WCF服务引用也许是Automapper(或类似的东西)。 谢谢你的任何建议。 数据库:PostgreSQL 9.5 数据库接口:Npgsql 3.0.5 .NET 4.5 Entityframework 6.0

WCF:远程服务器返回错误:(413)请求实体太大

我有一个wcf服务 有一个方法获取base64字符串来上传文件我的文件大小100kb它可能会更大的时间 我收到错误消息:远程服务器返回错误:(413)请求实体太大,同时尝试获取HttpWebResponse 这是我的wcf服务web.config 我的错是什么? 解决了 我发现我的错误,我删除这些代码 我认为https的传输模式,我们没有ssl所以我们不需要传输模式。 无论如何,我删除它,现在一切似乎都好

发布日志的WCF操作 – 它应该是回调吗?

WCF包含服务器和客户端在我的情况下,Server是生成数据(日志)的程序。 当准备好发布新数据时,应该通知几个订户。 所以我认为WCF服务器应该为所有感兴趣的客户端回调一些方法…. 我应该使用“CallbackContract”关键字来定义单向回调操作吗? 我需要的是void Log(string)方法,每次应该有什么东西时服务器都会为所有客户端调用,如何根据WCF定义这样的方法? 可能我应该避免“回调”,而是使用string[] getLogs()方法,它将返回新的日志? 然后客户端可以每隔一两秒钟调用getLogs方法来获取最后一个间隔的日志?

使用Ninject 2将参数传递给WCF ServiceHost类型

我想使用Ninject.Wcf扩展来创建参数化服务主机实例。 例如,我有一个MyWCFHandler类,只有以下构造函数: public MyWCFHandler(UserManager manager) { _manager = manager; } 但是当我写var myServiceHost = new ServiceHost(typeof(MyWCFHandler)); 我无法将依赖项对象传递给构造函数。 我不想搞乱我在如何将值传递给我的wcf服务上的构造函数中提供的自定义ServiceHost ? 我决定采用Ninject的方式,但不能完全理解如何在我的情况下采取行动。 以下是我理解Ninject中的WCF扩展的工作原理: 在我的项目中引用Ninject和Ninject.Extensions.WCF。 创建一个inheritanceNinject模块的类,并编写如下内容: internal class ServiceModule : NinjectModule { public override void Load() { Bind().To().WithConstructorParameters(myUserManagerIwantToUseInWCFHandler); } } 将使用新ServiceModule()初始化的内核添加到KernelContainer。 像这样使用NinjectServiceHost: var service = KernelContainer.Kernel.Get(); _host = new NinjectServiceHost( service ); 在那里我应该准备好我的主人打开。 问题是: 我应该如何将构造函数参数传递给NinjectModule? 当我准备好将参数绑定到它时,我应该创建NinjectModule的实例吗? 如何将它们传递给Get方法? 不幸的是,没有一个示例可以简单地显示参数化的ServiceHost启动。 我甚至不关心它是否是我使用的Ninject。 […]

使用DataContractSerializer序列化接口列表

我有一个类,其中有一些嵌套类。 我将它序列化并使用没有问题的方法将其发送到wcf服务。 这是class级; public class ComputerDTO { [DataMember] public ComputerTypeDTO Type { get; set; } [DataMember] public string ComputerName { get; set; } [DataMember] public MonitorDTO Monitor { get; set; } } 这是方法; public void Check() { Computer c = new Computer(); ISystemInfoOperations cli = GetServiceClient(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap() .ForMember(s => s.Hardware, m => m.MapFrom(q […]

WCF Rest客户端发送不正确的内容类型

我正在尝试使用wcf客户端向使用json的ColdFusion 9服务发送请求。 但是,请求的内容类型是针对xml的。 这是服务合同。 正如您所看到的,我们使用了json的RequestFormat。 [ServiceContract(Name = “ServiceAgreementRequestService”, Namespace = NetworkNamespaces.ServiceNamespace)] public interface IServiceAgreementRequestService { [OperationContract] [FaultContract(typeof(RequestFault))] [WebInvoke(UriTemplate = “?method=CreateUser”, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] CreateUserResponse CreateUser(CreateUserRequest request); } 我也尝试在OutGoing请求上设置Request.ContentType,这也不起作用。 using (var context = this.GetServiceClient(clientId)) { WebOperationContext.Current.OutgoingRequest.ContentType = “application/json; charset=UTF-8”; var request = new CreateUserRequest(user.Id, user.Person.FirstName, user.Person.LastName); var response = context.Channel.CreateUser(request); } 这是发送的请求 POST […]

WCF错误:找不到令牌validation器

我需要通过SSL使用WCF服务,而请求需要使用一个证书进行签名,并且响应需要使用另一个证书进行validation。 我在执行代码时遇到此错误: 找不到’System.IdentityModel.Tokens.X509SecurityToken’令牌类型的令牌validation器。 根据当前安全设置,不能接受该类型的令牌。 根据WCF跟踪,它在尝试validation响应签名时失败,因为我可以看到来自服务器的响应。 这是我的WCF服务设置: 正如你所看到的,我尝试了basicHttpBinding和customBinding(使用在线工具http://webservices20.cloudapp.net/default.aspx转换),我试图设置不同的设置组合变体,但仍然会收到此错误。 任何的想法? 取消响应证书签名validation也是一个选项,但我如何设置?

群集环境中的WCF双工通信

所以我看的是人们为Duplex Communications创建的示例示例,即由IIS托管并通过Silverlight连接。 有很多这方面的例子( 这篇MSDN文章很棒 ),但都使用相同的范例: 用户A连接到服务器A,它将他放入内存列表以接收未来的更新。 用户B连接到服务器A,它通知列表中有人“登录”的所有用户。 ……但是什么时候会发生什么 用户C连接到服务器C,服务器C的内存列表不包含用户A或B. 问题是我希望在集群(Web场)环境中实现它。 这使事情变得复杂,因为我无法validation哪个机器最终会调用wcf调用,因此将任何消息转发给所有其他用户是很困难的。 我能想到的最佳方案是实际让客户端连接到某种路由服务,该服务接收传入的请求并将客户端转发到特定的机器。 当然,然后我失去了Web场的好处,因为一台机器有效地处理了所有传入的请求。 一种不太有效的解决方案是让服务不断轮询某些内容(文件服务器上的文件或数据库中的表)查找更改。 一旦出现更改,请将其推送给客户端。 这似乎是一个非常丑陋的婴儿,所以。 我错过了什么? 更新 – 路由系统不可能满足我的需求。 我的托管公司不允许我通过IP直接连接到服务器场中的特定计算机。 我只能连接到通用负载均衡器前端,因此无法保证我的用户最终会在同一台服务器上运行。 到目前为止,我们要在数据库中查询表中寻找更改。 仍然看起来像一个丑陋的婴儿。

在Windows服务中托管WCF服务

我在Windows服务中托管WCF服务时遇到了一些麻烦。 我可以在VS2008中启动我的WCF服务,并导航到app.config中的基地址 我可以看到它工作正常,我得到的页面说我创建了一个服务,并显示了如何使用它的代码示例。 现在我的下一步是创建一个Windows服务来托管我上面显示的WCF。 我刚刚使用了te windows服务模板,它给了我一个Program.cs和Service1.cs,我将其重命名为WindowsServiceHost.cs。 在其中我有: private ServiceHost host; public WindowsServiceHost() { InitializeComponent(); } protected override void OnStart(string[] args) { try { var serviceType = typeof(Indexer.WCF.Indexer); host = new ServiceHost(serviceType); host.Open(); } catch (Exception ex) { } } protected override void OnStop() { if (host != null) { host.Close(); } } 一切都编译得很好,我可以运行InstallUtil(我定义了一个安装程序)。 该服务用于立即启动和停止,但禁用Windows Defender摆脱了这一点。 […]

访问WCF UsernamePasswordValidator中的当前InstanceContext

我有一个使用自定义UsernamePasswordValidator的WCF服务。 validation器需要访问我的entity framework上下文。 我想为整个服务调用创建一个ObjectContext,然后在调用结束时销毁/处理它。 所以我创建了一个提供此function的单例静态类,但是,现在发生的事情是,如果两个服务调用同时发生,则其中一个调用将处理单例。 我要么保留对ObjectContext的本地引用,在这种情况下,使用它的第二个服务将其视为处置并抛出和错误,或者,我在Singleton类的任何地方放置一个包装器属性,然后我需要抛出所有更改因为我正在获得该对象的新实例,如果另一个调用已经处理它。 所以基本上我的问题是如何为每个服务调用实例化一个ObjectContext? 注意:实例需要在服务代码和自定义UsernamePasswordValidator代码中可访问。 我不能只在构造函数中执行它或使用using语句,因为自定义UsernamePasswordValidator无权访问它 。 有没有办法每次调用一个静态类? 听起来确实不可能,但是这有什么办法呢? 我应该在会话中缓存对象吗? 我的服务托管在IIS中。 更新: 所以我已经把它钉在了使用IExtension对象在InstanceContext中存储状态。 但是如何在UsernamePasswordValidator中访问当前的InstanceContext?