Tag: #wcf

异步WCF调用保存线程?

在另一个SO问题中 ,我被建议发送异步网络请求,而不是在后台线程上发送同步请求。 原因是我不浪费一个线程。 我试图理解这是怎么回事。 这是最初的方法。 我可以理解这里有两个线程。 一个是主线程(1),一个是进行WCF调用的后台线程(Task.Run)(2): 这是我建议的方法的草图。 我试图了解如何保存线程。 在异步WCF调用之后,是否不会为异步WCF调用的回调创建另一个线程? 在进一步思考之后,如果不需要回调处理,可能只使用一个线程?

从WCF客户端消耗非wcf SOAP错误(定义了soap fault)

我有一个非Wcf服务器,我从WCF客户端调用,我需要访问已注册的soap故障,如果服务器抛出它(它包含我需要用户的反馈)。 我使用了如何从WCF客户端访问SOAP 1.1故障详细信息中的示例(没有错误契约),但是给出了一个痛苦,我确实在wsdl中定义了错误契约,至少每个SOAP规范,并且错误包含错误代码和错误字符串。 … … … … 服务导入可以正确识别所有这些并生成正确的代码构造: [System.Runtime.Serialization.DataContractAttribute(Name=”BtsSoapException”, Namespace=”http://www.cisco.com/BTS10200/i01″)] [System.SerializableAttribute()] public partial class BtsSoapException : object … …. [System.ServiceModel.ServiceContractAttribute(Namespace=”http://www.cisco.com/BTS10200/i01″, ConfigurationName=”CiscoBTSService.Bts10200Operations”)] public interface Bts10200Operations { [System.ServiceModel.OperationContractAttribute(Action=””, ReplyAction=”*”)] [System.ServiceModel.FaultContractAttribute(typeof(TestCiscoBTS.CiscoBTSService.BtsSoapException), Action=””, Name=”fault”)] TestCiscoBTS.CiscoBTSService.loginResponse login(TestCiscoBTS.CiscoBTSService.loginRequest request); … 当我使用无效帐户调用login() ,我会根据wsdl获得正确的响应: soapenv:Server.generalException 401 java.lang.Exception: No user profile defined in the database for fakeuser com.sswitch.oam.soap.intf.BtsSoapException at com.sswitch.oam.soap.impl.UserAuth.validateUser(UserAuth.java:63) … FaultExcpetion会触发,但是它的空白( Message =“”)并且我没有看到任何暴露BtsSoapException实例的属性。 […]

EntityFramework.dll中发生’System.Data.Entity.Infrastructure.DbUpdateException’

我写了一个相当简单的代码(基于WCF和Windows窗体的客户端服务器)。 我试图更新数据库,以便我可以测试我的代码,我遇到了上述exception。 任何想法如何解决? // For testing public void updateTable() { using (var db = new overlayDBEntities()) { var overlaydb = new overlayData { DeviceId = “1111”, TimestampUTC = new DateTime(1990, 1, 1, 9, 9, 9), OverlayData1 = “Yoash And Maayan” }; db.overlayData.Add(overlaydb); try { db.SaveChanges(); } catch(Exception ex) { Console.WriteLine(ex.Message); } var overlaydb1 = new […]

执行entity framework时,CONTEXT_INFO丢失.SaveChanges(重载)

解: 你可以找到: 这里 如果在操作之前尚未打开连接,则对象上下文将打开该连接。 如果对象上下文在操作期间打开连接,则它将始终在操作完成时关闭连接。 如果手动打开连接,则对象上下文不会将其关闭。 调用Close或Dispose将关闭连接。 问题是EF会打开和关闭SetUserContext的连接,所以我会松开CONTEXT_INFO。 为了保持它,我需要手动打开连接并在SaveChanges之后关闭它 public int SaveChanges(string modifierId) { Database.Connection.Open(); SetUserContext(modifierId); var changes = base.SaveChanges(); Database.Connection.Close(); return changes; } 题 : 该系统适用于数据仓库。 数据库必须知道谁修改它并在Audit表中保存任何更改。 为了达到这个结果,我主要依靠触发器和程序: 此函数将userId保存在CONTEXT_INFO中: CREATE PROCEDURE [dbo].[SetUserContext] @userId NVARCHAR (64) AS BEGIN SET NOCOUNT ON; DECLARE @context VARBINARY(128) SET @context = CONVERT(VARBINARY(128), @userId) SET CONTEXT_INFO @context END 这个可以在任何地方使用来获取userId: CREATE […]

EF与Nhibernate合并断开的对象图

我刚刚在几个星期前开始了一个新项目,并决定尝试使用EF Code First,之前我使用过NHIbernate,我喜欢从MS中获得ORM的想法,到目前为止它一直很棒 – 直到我开始制作复杂的物体。 我的项目层如下:Azure WCF角色 – 使用EF Code First处理DAL。 带有Knockout的MVC 4的Azure WebSite角色 – 处理客户端。 (我为未来创建了WCFRole,我们需要从不同平台访问服务) 这是非常基本的EF Code First设计,我遇到了以下问题: – 我只在服务和站点之间传输DTO,并制作了一个通用映射器来映射内部DTO(如果存在)。 – 我有一个City表和一个带有City Property的地址对象(我们需要City作为特殊function的属性,而不仅仅是名称) 客户端知道城市列表,并且正在返回现有城市的新地址当我尝试添加新地址时,会创建一个新城市,其中包含现有旧城市的数据,我已经知道这是因为EF没有我不知道如何合并断开连接的对象和我阅读的内容不支持任何合并,并且简单的不太舒服的解决方案只是管理对象状态 – 将City对象状态更改为Unchanged。 但是使用大型复杂数据库设计处理这个问题听起来很可怕 我的问题 – 处理这个问题的最佳做法/简单方法是什么? 我想过一些解决方案 – 覆盖SaveChanges方法遍历所有对象,如果ID不是null / 0 /其他一些约定将其从Added更改为Unchanged – 这个解决方案可以完成吗? 我的第二个问题 – 因为我对NHibernate(连接对象)有很多经验 – 我想知道NHibernate对此有何看法? 我在某处读到NHibernate确实具有重新连接断开的复杂对象的AutoMagic Mergefunction,这是真的吗? 我的基本断开连接的地址 – >城市设计是否会与AutoMagic Merge一起开箱即用? 使用它的后果是什么? 非常感谢 :) 更新:该问题的简化代码。 […]

使用WCF REST在PUT和POST之间的区别

我试图实现一个REST WCF,以探索PUT和POST动词之间的区别。 我已使用该服务在某个位置上传了一个文件。 服务实现如下: [OperationContract] [WebInvoke(UriTemplate = “/UploadFile”, Method = “POST”)] void UploadFile(Stream fileContents); public void UploadFile(Stream fileContents) { byte[] buffer = new byte[32768]; MemoryStream ms = new MemoryStream(); int bytesRead, totalBytesRead = 0; do { bytesRead = fileContents.Read(buffer, 0, buffer.Length); totalBytesRead += bytesRead; ms.Write(buffer, 0, bytesRead); } while (bytesRead > 0); using (FileStream fs […]

故障exception – 找不到方法

我对包含我的应用程序服务的外部项目的引用有些麻烦。 更改类中某些属性的类型后,出现“未找到方法:get_Size()”(其中Size是字段名称)的错误 在重建多次,删除该类并添加一个具有不同名称的新类之后,我遇到了一个新的但类似的问题。 现在应用程序找不到我的Factory类中的方法: 找不到方法:’Ropes.Services.Contracts.Data.SearchResultPage`1 Ropes.Services.Business.Experience.ExperienceFactory.Search(Ropes.Services.Business.Search.SearchRequest)’。 我已经重新编译了一百万次; 清空bin和obj文件夹,删除并重新添加引用但无济于事。 我的老板对我不利,所以如果有人可以提供帮助,我将非常感谢,并向你保证业力会对你好看:) 谢谢

如何从服务器端方法中止WCF文件上载

我正在使用WCF(.Net 4)从.Net 4 WinForms客户端应用程序上传文件到IIS服务器,用于内部系统。 我有一个MessageContract类定义如下: /// /// Message contract for uploading document data together with a file stream /// [MessageContract] public class DocumentDataFileUploadInfo : IDisposable { /// some fields omitted for brevity /// /// The stream containing the file /// [MessageBodyMember(Order = 1)] public Stream FileByteStream; /// /// Dispose of the stream if necessary /// […]

RESTful Web服务返回XML而不是JSON

我有这个简单的Web服务,现在它只是查看部件号是否为A123456789然后它返回一个型号。 这将由将连接到数据库以检查partno的逻辑替换,然后返回实际的型号。 但此时我只需要它返回一些虚拟JSON数据。 然而,当我使用Fiddler并查看http:// localhost:PORT / Scan / Model / A123456789的web broswer中的调用时,它返回此 Model: CVS-1679 但是当我在同一个URI的fiddler中进行GET时,我得到了 “Model: CVS-1679” 仅在textview选项卡下。 当我将ResponseFormat设置为JSON时,为什么它以XML(在Fiddler中的浏览器和文本中)而不是JSON返回? 我的代码: [WebGet(UriTemplate = “Model/{partno}”, ResponseFormat = WebMessageFormat.Json)] public string Model(string partno) { if (partno == “A123456789”) { string modelno = “CVS-1679”; return “Model: ” + modelno; } else { string modelno = “CVS-1601”; return “Model: ” […]

Web服务/ wcf服务,返回数据集是否更好?

因此,从我所看到的有关服务的内容来看,自定义对象似乎是在编写服务以返回数据时的方法。 如果我正在编写将用于1)填充数据库的服务,或者2)为网站提供信息,那么返回数据集/数据表是否有用,而不是具有所有这些的自定义对象列表信息? 谢谢