Tag: #wcf

使用azure缓存表现不佳

在将几个数据库调用切换到缓存之后,我们的性能实际上更差。 根据新遗物,我们注意到CLR时间和响应时间大幅增加。 跳转请参见附图(缓存在0:00引入1/5)。 唯一改变的是Azure App Fabric Cache的引入。 我们的缓存客户端使用单例模式,因此只有一个用于Web服务的实例。 缓存工厂创建一次然后存储起来,这样我们就不会每次都打开连接的开销。 此外,NewRelic报告缓存平均需要15毫秒。 在许多情况下,15ms可能比数据库慢! nto我们坚持的对象是缓存两个字节数组的构成,一个长度约为421,另一个长度为8。 没有真正理解为什么引入缓存会增加响应时间。 字节数组是否不缓存友好? 我的类看起来像这样(在被推入类之前填充的唯一两个属性是两个字节数组,其他所有内容都保留为默认值) [Table] public class GameState { [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] public int Id { get; set; } [Column(UpdateCheck = UpdateCheck.Never, Name = “game_id”)] public int GameId { get; set; } [Column(UpdateCheck = UpdateCheck.Never, Name = “player_id”)] […]

WCF / C#无法捕获EndpointNotFoundException

我已经创建了一个WCF服务和客户端,它一直有效,直到捕获错误。 具体来说,我试图捕获EndpointNotFoundException以便在服务器因任何原因发生不存在时。 我已经尝试了一个简单的try / catch块来捕获特定的错误和它派生的通信exception,并且我尝试捕获Exception。 这些都没有成功捕获exception,但我确实得到了 System.ServiceModel.dll中出现’System.ServiceModel.EndpointNotFoundException’类型的第一次机会exception 在客户端尝试打开服务时的输出窗口中。 关于我做错了什么的任何想法?

如何为WCF配置log4net

在我的asp webforms应用程序上,我会进行log4net初始化; log4net.Config.XmlConfigurator.Configure(); 在Application_Start上的global.asax上,以便在应用程序启动时完成一次。 为IIS托管的WCF应用程序配置log4net的正确方法是什么(具体询问该行在何处放置使用哪个事件等),以便log4net初始化一次并且没有不必要的初始化。

我可以在RESTful服务中使用TCP吗?

REST正在使用Web的当前function并在其上应用一些原则以提高其效率。 它使用标准HTTP动词进行通信,并利用其无状态特性。 但是,REST服务是否可以使用TCP协议进行通信? 如果是,那么它会违反其原则吗?

WCF System.Object序列化

我有一个要求,我必须使用System.Object作为WCF中的参数。 因为它不可序列化,所以我收到消息,因为它不支持操作,因为它使用System.Object。 解决这个问题的任何方法。

在IIS上托管WCF Web服务时显式调用服务构造函数

我想在Microsoft IIS(IIS主机)上托管我的WCF服务。 为此,我创建了我的服务: // The service public class MyService : IMyService { // Ctors public MyService() { // Def ctor: I don’t want to call it } public MyService(…) : this() { // Parametric ctor, I want to call it! } … } // The contract [ServiceContract] public interface IMyService { … } 我创建了一个svc文件(一种为我的服务提供基地址的好方法): 但是这样做,当托管我的服务(只是在IIS中创建一个指向我的应用程序所在的文件夹的虚拟目录,通常是项目目录)时,IIS将调用默认构造函数。 […]

使用wsHttpBinding的WCF服务 – 操作HTTP请求标头

我一直在关注本教程,以便在我的WCF服务中使用传输安全性进行用户名身份validation。 然而,教程指的是使用basicHttpBinding这是不可接受的 – 我需要wsHttpBinding 。 我们的想法是在WCF服务上有一个自定义的BasicAuthenticationModule ,它将从HTTP请求中读取“Authorization”头,并根据“Authorization”头内容执行auth过程。 问题是缺少“授权”标题! 我已经通过自定义行为实现了IClientMessageInspector ,以便操作传出消息并添加自定义SOAP标头。 我在BeforeSendRequest函数中添加了以下代码: HttpRequestMessageProperty httpRequest = request.Properties.Where(x => x.Key == “httpRequest”).Single().Value; httpRequest.Headers.Add(“CustomHeader”, “CustomValue”); 这应该工作,并根据许多Web资源,它适用于basicHttpBinding但不适用于wsHttpBinding 。 当我说“工作”时,我的意思是WCF服务成功接收了标头。 这是在WCF服务端检查收到的HTTP消息的简化函数: public void OnAuthenticateRequest(object source, EventArgs eventArgs) { HttpApplication app = (HttpApplication)source; //the Authorization header is checked if present string authHeader = app.Request.Headers[“Authorization”]; if (string.IsNullOrEmpty(authHeader)) { app.Response.StatusCode = 401; app.Response.End(); } […]

WCF REST文件上载

我正在开发一个WCF Web服务,需要能够上传文件等。 目前我添加’floorplan’项的方法如下: [OperationContract] [WebInvoke(Method = “GET”, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = “Floorplan?token={token}&floorplan={floorplan}”)] string XmlInputFloorplan(string token, string floorplan); 我需要更改它,以便将图像作为此调用的一部分上载,可以在以下方法中使用: public static Guid AddFile(byte[] stream, string type); 在这种情况下, byte[]是图像的内容。 然后将得到的guid传递给数据层,并最终确定平面图的添加。 所以我需要弄清楚两件事: 1)我应该如何改变XmlInputFloorplan接口方法,以便它还允许图像作为参数? 2)如何在更改后使用服务? 谢谢! 这是我解决它的方式: [OperationContract] [WebInvoke(Method = “POST”, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = “Floorplan”)] XmlDocument XmlInputFloorplan(Stream content); 期待输入XML,如: Image包含一个base […]

如何将参数传递给WCF post方法(一个restful服务)

我正在开发基于WCFrest的服务。 我在我的服务中编写了Get和Post方法,并且当我输入URL(JSON格式)时,Get方法能够工作(获取数据)。 问题是,当我尝试对POST方法执行相同操作时,该URL正在导航到其他页面“找不到页面…”。 我知道POST方法需要表单提交来处理请求。 出于这个原因,我尝试了chrome扩展(Simple Rest客户端,Advanced Rest客户端,Post man rest客户端)和Fiddler。 这里我发布我的服务方法 – Get方法(接口方法声明)。 [OperationContract] [WebInvoke(Method = “GET”, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = “GetCategoryTypes/”)] List GetCategoryTypes(); 这是我的POST方法 [OperationContract] [WebInvoke(Method = “POST”, UriTemplate = “AddOrders/”, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] int AddOrders(decimal amount, int tableID, DateTime orderDate, int […]

使用NetTcpBinding进行双工通信 – ContractFilter不匹配?

我正在使用NetTcpBinding在客户端和服务器之间打开双工通信通道方面取得缓慢而稳定的进展。 (仅供参考,你可以在这里和这里观察我的新手进展!) 我现在处于通过服务器防火墙成功连接到服务器的阶段,客户端可以向服务器发出请求。 然而,在另一个方向,事情并不那么幸福。 它在我自己的机器上测试时工作正常,但是当通过互联网进行测试时,当我尝试从服务器端发起回调时,我收到一个错误: The message with Action ‘http://MyWebService/IWebService/HelloWorld’ cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have […]