Tag: #wcf

如何在Web服务器和站点服务器之间建立双向通信?

我正在计划一个SaaS系统,用C#编写,ASP.NET使用WCF,它有两个独立的组件: 在云中的静态IP Web服务器上将是一个Web应用程序,对所有客户端都是通用的。 在每个客户的办公室内将是另一个应用程序,安装在带IIS的服务器上。 该站点应用程序显然可以连接到网站上发布的Web服务。 但这就是问题 – 我还希望网络应用程序能够启动与站点应用程序的连接……并且现场服务器可能不一定具有静态IP。 我无法控制这一点,因为我们将来可能会有数百个客户,我们不能通过坚持客户拥有固定IP的服务器来限制我们的销售能力。 那么,怎么做呢? 我可以让网站应用程序每分钟左右“检入”一次,让网络应用程序有可能回复“当你在这里时,请做x,y,z …… ”但似乎非常不优雅。 此外,如果我们谈论数百个客户,我不想用所有这些“嗨那里”轰炸我的网络服务器! 消息,如果它们实际上不是必需的。 有没有更好的办法?

从浏览器运行WCF方法

我在Visual Studio 2010中使用C#创建一个非常基本的WCF服务。我想知道我是否可以通过键入类似于: //localhost:49815/Service1.svc/methodName(parameterValue) : //localhost:49815/Service1.svc/methodName(parameterValue)直接从浏览器运行我的方法? 这是我的代码的本质。 接口: using … namespace WcfService1{ [ServiceContract] public interface IService1{ [OperationContract] [WebGet] string echoWithGet(string s); [OperationContract] [WebInvoke] string echoWithPost(string s); } } 方法: public string echoWithGet(string s ){ return “Get: “+s; } public string echoWithPost(string s){ return “Post: ” + s; }

如何减少域/实体/ DTO对象的重复?

我正在重新设计我当前的项目以使其更易于维护,并尽力遵循良好的设计实践。 目前我有一个Silverlight组件的解决方案,用于所述SL应用程序的ASP.Net主机,该应用程序还包含WCF RIA服务和共享类库,因此SL和WCF服务都可以共享对象。 业务逻辑遍布各处,所有CRUD操作都在我的WCF服务中手动编码。 所以,我正在为一切创建一个新的结构,并将这个混乱移植到新的格式。 在这样做的过程中,当我不知道自己是否应该这样时,我发现我正在复制课程。 我的新结构如下: 客户: Reporting.Silverlight = Silverlight应用程序。 这将参考我的DTO课程。 Reporting.Web =持有我的SL应用程序,是人们进入它的主要切入点。 商业: Reporting.Services =我的WCF服务就在这里。 我的SL应用程序将调用此方法来执行操作,这些服务将返回DTO类。 Reporting.Services.Contracts =保存我的WCF服务接口,并包含带有DataContract装饰器的DTO类。 Reporting.Domain =保存我的域对象和业务逻辑 数据: Reporting.Data.Contract =保存我的存储库和工作单元的接口 Reporting.Data =存储库/ UoW的具体实现。 这里定义了Entity Framework 5上下文。 Reporting.Data.Models =保存我的所有Entity对象,以便EF5可以用SQL做它的事情。 我有3个地方,我几乎完全相同的课程,对我来说它闻起来。 在Reporting.Services.Contracts内部,我有一个DTO,可以交给SL客户端。 这是一个例子: [DataContract(Name = “ComputerDTO”)] public class ComputerDTO { [DataMember(Name = “Hostname”)] public string Hostname { get; set; } [DataMember(Name = […]

WCF – 找不到X509SecurityToken的令牌validation器

我正在尝试调用第三方Web服务,我已经到了能够在服务跟踪查看器中实际看到服务器响应的地步。 但是,我不断从.NET获得exception: Cannot find a token authenticator for the ‘System.IdentityModel.Tokens.X509SecurityToken’ token type. Tokens of that type cannot be accepted according to current security settings. 我的app.config看起来像这样(用占位符替换了Thumbprints): <defaultCertificate findValue="” x509FindType=”FindByThumbprint” storeLocation=”CurrentUser” storeName=”TrustedPeople”/> <clientCertificate findValue="” x509FindType=”FindByThumbprint”/> 现在,我已经尝试了有关此exception的所有内容。 将authenticationMode设置为MutualCertificate :服务器响应404 设置allowSerializedSigningTokenOnReply :无变化 来自服务器的响应包含: 我可以在某处添加x508SecurityToken处理程序,否则忽略此错误(这样做是否安全) exception堆栈跟踪: Server stack trace: at System.ServiceModel.Security.ReceiveSecurityHeader.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver, IList`1 allowedTokenAuthenticators, SecurityTokenAuthenticator& usedTokenAuthenticator) at System.ServiceModel.Security.ReceiveSecurityHeader.ReadToken(XmlDictionaryReader […]

C# – JObject.Parse – 无效的JSON

我正在使用返回JSON的API。 我有一个调用api的方法,并解析所需节点的JSON响应。 到目前为止,一切都运行正常,除了最新的JSON响应似乎格式不正确。 其他回复如下: { “Keyword”:”\”marhope\””, “TermKey”:null, “Customers”:[ { “Memberships”:[ ], “CompanyId”:0, “ObjectId”:112974, “ObjectType”:”Customer”, } ] } 我使用JObject.Parse按名称返回适当的节点。 最新的JSON响应如下: { [ { “AnimalId”:9079117, “SpeciesCode”:”XX”, } ] } 如您所见,没有“名称”,JSON稍微无效。 我怎么解析这个。 对于第一个例子,我使用下面的代码,但现在JSON没有“名称”,我不知道如何处理这个问题,想法? JObject results = JObject.Parse(csr.SearchCustomer(1, 1, 870, term)); foreach (var resp in results[“Customers”]) { string obj = (string)resp[“CompanyId”]; }

在使用数据协定序列化程序序列化IXmlSerializable对象时,如何控制根元素名称空间和名称?

我有一个实现IXmlSerializable的类型,我使用DataContractSerializer序列化。 在将其作为XML文档的根元素序列化时,如何控制根元素名称空间和名称? 说我有以下类型: public partial class PersonDTO : IXmlSerializable { public string Name { get; set; } #region IXmlSerializable Members public System.Xml.Schema.XmlSchema GetSchema() { return null; } public void ReadXml(System.Xml.XmlReader reader) { Name = reader[“name”]; if (!reader.IsEmptyElement) reader.Skip(); reader.Read(); } public void WriteXml(System.Xml.XmlWriter writer) { writer.WriteAttributeString(“name”, Name); } #endregion } 如果我使用DataContractSerializer作为我的根对象将其序列化,我得到: 我希望根名称为 ,根名称空间为”http://www.MyCompany.com” ,所以我尝试添加[DataContract]如下所示: [DataContract(Name […]

C#如何序列化system.linq.expressions?

我正在研究winRT和entity framework(到SQL),它们之间进行通信的层是WCF服务。 在entity framework中,我使用的是Repository Pattern,我有方法: public IQueryable GetBySearch(Expression<Func> search) { return this.Context.Users.Where(search); } 一切正常,但是当我把它添加到WCF [OperationContract] IQueryable GetUserBySearch(Expression<Func> search); 和: public IQueryable GetUserBySearch(Expression<Func> search) { IUser user = new UserRepository(); return user.GetBySearch(search); } 但是Expression不能序列化的问题,因此,WCF无法序列化它。 所以我想inheritance它并使其成为[Serializable]但问题是它是一个密封的类。 有人可以帮我解决问题吗?

Wson中的JsonConvert.DeserializeObject和“d”包装器

默认情况下,WCF服务在“d”包装器中包装JSON响应,在那里我发现解析它有问题。 如果我用JsonConvert.DeserializeObject(响应)解析响应 “{\”d\”:\”{\”a0b70d2f-7fe4-4aa2-b600-066201eab82d\”:\”Thelma\”,\”d56d4d4f-6029-40df-a23b-de27617a1e43\”:\”Louise\”}\”}” 我错了: After parsing a value an unexpected character was encoutered: a. Line 1, position 9. 如果我改变响应 “{\”a0b70d2f-7fe4-4aa2-b600-066201eab82d\”:\”Thelma\”,\”d56d4d4f-6029-40df-a23b-de27617a1e43\”:\”Louise\”}” 我搞定了。 那么如何从WCF服务解析这个“d”包装的JSON响应呢? 有没有更好的方法来解析JSON?

WCF服务参考不在其他PC上工作

我有一个Windows应用程序 – Metro应用程序连接在同一台PC上运行的Net TCP WCF服务(托管在控制台应用程序中),但是在Windows 8的桌面模式下。我在metro应用程序中添加了WCF服务的引用,一切正常。 我打包我的商店/地铁应用程序和WCF服务,并尝试在没有安装Visual Studio的另一台PC上,所以我不重新编译代码,我只是安装metro应用程序包并运行WCF服务的可执行文件。 WCF服务启动正常但是当我启动我的地铁应用程序时它给我错误(见下图) 似乎由于某种原因,在其他PC上安装的metro应用程序无法找到服务引用。 我在google搜索后尝试了很多东西,但没有任何作用。 任何想法/提示/建议将不胜感激。

文件上载,远程服务器返回错误:(413)请求实体太大

当我通过WCF服务上传文件时,我收到exception,“远程服务器返回错误:(413)Request Entity Too Large” 关于这个例外,有很多问题和答案。 但是,他们都没有解决我的问题。 我正在使用Windows Web Server 2008 R2,IIS 7.5。 我的客户端和WCF应用程序托管在IIS中。 我正在使用频道来呼叫WCF服务。 var binding = new BasicHttpBinding(); binding.MaxReceivedMessageSize = Int32.MaxValue; binding.MaxBufferPoolSize = Int32.MaxValue; binding.MaxBufferSize = Int32.MaxValue; binding.ReaderQuotas.MaxStringContentLength = Int32.MaxValue; binding.ReaderQuotas.MaxArrayLength = Int32.MaxValue; binding.ReaderQuotas.MaxBytesPerRead = Int32.MaxValue; binding.ReaderQuotas.MaxDepth = Int32.MaxValue; binding.ReaderQuotas.MaxNameTableCharCount = Int32.MaxValue; var address = new EndpointAddress(“WCF Service URL”); return ChannelFactory.CreateChannel(binding, address); WCF配置文件如下: 另外,我在客户端web.config文件中添加了以下配置: […]