Tag: #wcf

通常被接受的方法来避免每个派生类的KnownType属性

是否有一种普遍接受的方法来避免在WCF服务上使用KnownType属性? 我一直在做一些研究,看起来有两种选择: 数据合同解析器 NetDataContractSerializer 我不是每次添加新类型时都必须静态添加KnownType属性的忠实粉丝,因此想要避免它。 是否应该使用第三种选择? 如果是这样,它是什么? 如果没有,上述两个选项中的哪一个是正确的方法? 编辑 – 使用方法 第三种选择是使用reflection [DataContract] [KnownType(“DerivedTypes”)] public abstract class FooBase { private static Type[] DerivedTypes() { return typeof(FooBase).GetDerivedTypes(Assembly.GetExecutingAssembly()).ToArray(); } }

如何使WCF客户端符合特定的WS-Security – 签署UsernameToken和SecurityTokenReference

我需要创建一个wcf客户端来调用我无法控制的服务。 我得到了一个wsdl和一个有效的soapui项目。 该服务使用用户名/密码和x509证书。 UPDATE 我现在明白问题是什么,但我仍然不确定我需要采取哪些步骤才能创建所需的消息,所以任何帮助都将非常感激。 我需要同时签署UsernameToken和SecurityTokenReference。 由于不再使用,我必须从此post中删除我必须创建自定义绑定的代码。 我不再向绑定添加SecurityBindingElement,而是添加一个将安全元素写入标头的新行为。 因此,通过inheritanceSignedXml类,添加签名引用然后调用ComputeSignature以在Security头中创建Signature节点,从头开始创建安全节点。 您需要传递xml以登录SignedXml构造函数才能使其生效。 传递UsernameToken是没问题的,这似乎是正确签名的。 问题是SecurityTokenReference仅在调用ComputeSignature()时创建,因此我无法向此元素添加签名引用,因为它在需要时不存在(在SignedXml的重写的GetIdElement方法中)在ComputeSignature()之前调用的) 我用来创建要插入Security头的签名块的代码如下 string certificatePath = System.Windows.Forms.Application.StartupPath + “\\” + “Certs\\sign-and- enc.p12”; XmlDocument xd = new XmlDocument(); xd.LoadXml(xml); // Set Certificate System.Security.Cryptography.X509Certificates.X509Certificate2 cert = new X509Certificate2(certificatePath, “password”); MySignedXml signedXml = new MySignedXml(xd); signedXml.SigningKey = cert.PrivateKey; // Create a new KeyInfo object. KeyInfo keyInfo = new […]

在IIS 7中启动应用程序时出现“CS0016:无法写入输出文件”错误

我正在运行Windows 7,并且通常不是此设置中的开发人员,并且最近在C#中构建了一个WCF Rest服务,我现在正尝试在本地计算机上部署到IIS。 经过多次争论,我设置了应用程序,但是当我导航到应用程序时,我收到一条错误消息:编译错误 描述:在编译服务此请求所需的资源期间发生错误。 请查看以下特定错误详细信息并相应地修改源代码。 编译器错误消息:CS0016:无法写入输出文件’c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ scom_sibyll \ 8c0b945e \ 9329016 \ App_global.asax.eagmqgcd.dll’ – ‘访问被拒绝。 “ 我尽我所能地搜索了网络,并更改了Temporary ASP.NET Files fodler的权限,以允许网络服务帐户拥有完整权限,并对Temp文件夹执行相同的操作。 它在失败之前复制了许多文件,因此它可能具有写入权限,所以我检查了从我的源文件夹中读取的权限,这也是有效的。 我还注意到它在尝试缓存DLL文件时出现问题,并试图关闭我的防病毒保护,以及关闭UAC,只是为了看看是否能够找出阻止这种情况发生的原因。 我现在的想法很新鲜。 有人有什么建议吗?

套接字连接已中止 – CommunicationException

本来: 我认为这是一个循环参考问题……..事实certificate它不是。 问题产生于根本没有配置服务配置。 由于默认值非常低,因此发送大量数据会导致服务崩溃。 场景: 看来我的WCF服务中可能有循环引用,但使用“[DataContract(IsReference = true)]”,没有任何帮助解决它。 我收到错误“套接字连接已中止。这可能是由于处理消息时出错或远程主机超出接收超时或基础网络资源问题引起的。本地套接字超时为’00:01:00′ “。 我错过了什么吗? 码: [DataContract(IsReference=true)] public class Message { [DataMember] public string TopicName { get; set; } [DataMember] public string EventData { get; set; } [DataMember] public SerializableDictionary FuturesLineDictionary { get; set ; } } 思考: 我想知道是不是因为我有一个FuturesAsset类,它有一个BindableDictionary类型的属性(这是一个CUSTOM OBJECT),该属性包含一个FuturesLinesAssets列表。 见下文: 家长: public class FuturesAsset { public string AssetName […]

如何将WCF模板添加到Visual Studio Express?

我正在阅读Michele Bustamante撰写的学习WCF一书,并尝试使用Visual Studio C#Express 2008进行操作。说明使用WCF项目和项目模板,这些模板不包含在VS C#Express中。 Visual Studio Web Developer Express附带了这些类型的模板,我试图将它们复制到VS C#Express找到的正确目录中,但IDE找不到它们。 有一些注册过程吗? 或者在某处配置文件?

我如何在wcf服务中拥有会话ID

我正在编写一个具有多种方法的身份validation服务。此方法的一部分是ChangePassword。 我希望当任何机构想要更改密码时,请先登录系统。为此我想要一个会话ID并在更改传递之前检查它。 我怎么能这样做,并且会议时间有多长? 编辑1) 我编写这段代码,但每次我想要获取它的值时,我的会话都是null: 类: [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] public class Service2 : IService2 { string result { // Store result in AspNet session. get { if (HttpContext.Current.Session[“Result”] != null) return HttpContext.Current.Session[“Result”].ToString(); return “Session Is Null”; } set { HttpContext.Current.Session[“Result”] = value; } } public void SetSession(string Val) { result = Val; } public string […]

HttpContext.Current在异步Callback中为null

尝试在方法回调中访问HttpContext.Current ,所以我可以修改Session变量,但是我收到HttpContext.Current为null的exception。 当_anAgent对象触发它时,异步触发回调方法。 在查看SO上的类似 问题之后,我仍然不确定解决方案。 我的代码的简化版本如下所示: public partial class Index : System.Web.UI.Page protected void Page_Load() { // aCallback is an Action, triggered when a callback is received _anAgent = new WorkAgent(…, aCallback: Callback); … HttpContext.Current.Session[“str_var”] = _someStrVariable; } protected void SendData() // Called on button click { … var some_str_variable = HttpContext.Current.Session[“str_var”]; // The agent […]

记忆流和大对象堆

我必须使用WCF通过不可靠的连接在计算机之间传输大文件。 因为我希望能够恢复文件并且我不希望受到WCF的文件大小限制,所以我将这些文件分块为1MB。 这些“块”以流的forms传输。 到目前为止哪个方面效果很好。 我的步骤是: 打开文件流 从文件中读取块到byte []并创建内存流 转移块 返回2.直到整个文件发送 我的问题在第2步。我假设当我从字节数组创建一个内存流时,它将最终在LOH上并最终导致一个outofmemoryexception。 我实际上无法创建此错误,也许我的假设是错误的。 现在,我不想在消息中发送byte [],因为WCF会告诉我数组大小太大。 我可以更改允许的最大数组大小和/或我的块的大小,但我希望有另一种解决方案。 我的实际问题: 我目前的解决方案是否会在LOH上创建对象,这会导致我的问题吗? 有没有更好的方法来解决这个问题? 顺便说一句:在接收端,我简单地从到达的流中读取较小的块并将它们直接写入文件,因此不涉及大字节数组。 编辑: 当前解决方案 for (int i = resumeChunk; i < chunks; i++) { byte[] buffer = new byte[chunkSize]; fileStream.Position = i * chunkSize; int actualLength = fileStream.Read(buffer, 0, (int)chunkSize); Array.Resize(ref buffer, actualLength); using (MemoryStream stream = new […]

使用自定义ClientCredentials的WCF身份validation:要使用的clientCredentialType是什么?

我不得不放弃基本的WCF UserName / Pwd安全性并实现我自己的自定义客户端凭据,以保留超出默认提供的更多信息。 我参与了这篇MSDN文章 ,但我遗漏了一些东西,因为它不起作用。 首先,我有一些自定义ClientCredentials,它们提供自定义ClientCredentialsSecurityTokenManager: public class CentralAuthCredentials : ClientCredentials { public override System.IdentityModel.Selectors.SecurityTokenManager CreateSecurityTokenManager() { return new CentralAuthTokenManager(this); } } public class CentralAuthTokenManager : ClientCredentialsSecurityTokenManager { private CentralAuthCredentials credentials; public CentralAuthTokenManager(CentralAuthCredentials creds) : base(creds) { this.credentials = creds; } public override SecurityTokenProvider CreateSecurityTokenProvider(SecurityTokenRequirement tokenRequirement) { if (this.IsIssuedSecurityTokenRequirement(tokenRequirement) || tokenRequirement.TokenType == CentralAuthToken.TOKEN_TYPE) return […]

C#中具有最低内存占用的最快串行器和解串器?

我目前正在使用二进制格式化程序(Remoting)来序列化和反序列化对象以便在我的LAN周围发送。 我最近从2.0升级到.NET 3.5。 3.5有没有引入任何新类型来提高序列化性能? 我已经查看了DataContractSerializer ,但是它将任何内容序列化为基础XML …这必须增加内存占用。 什么是通过LAN发送对象的最快串行器? 我不关心互操作或版本控制…… 我需要速度! 我对第三方开源替代品持开放态度。