Tag: #wcf

没有实现接口成员

嗨,我有以下代码,但我一直收到错误: ‘JsonWcfService.GetVenues’没有实现接口成员’GetVenuesByLocation(string search)’。 我对C和.Net相当新,所以大部分内容都是剪切和粘贴的。 非常感谢您的帮助。 IGetVenues.cs using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using System.ServiceModel.Web; namespace JsonWcfService { [ServiceContract] public interface IGetVenues { [OperationContract] //attribute for returning JSON format [WebInvoke(Method = “GET”, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = “json/Venues/search={search}”)] //method List GetAllVenuesMethod(string search); [OperationContract] [WebInvoke(Method = “GET”, ResponseFormat […]

为什么我的wcf Web服务引用中有额外的参数?

我正在尝试将ASP.Net Web服务转换为WCF应用程序。 客户端在.Net Compact Framework上,它不支持WCF,所以我需要确保WCF继续支持ASP样式的web服务。 当我在Visual Studio中添加Web服务引用时,生成的代理类’方法有额外的参数。 例如,如果方法定义为: public void GetEmpInfo(int empNo) 该方法将在代理类中显示为: public void GetEmpInfo(int empNo, bool empNoSpecified) 是什么导致这种情况,如何让它停止?

以适当的格式返回JSONP WCF

我正在尝试为jQuery输出正确包装的JSONP值以供使用。 我正在寻找的输出是: jsoncallback({“Status”: “OK”}) 但它的输出是: “jsoncallback({“Status”: “OK”})” 显然这不是正确的JSONP格式,因为jQuery请求无法处理响应。 我在C#中的OperationContract是: [OperationContract] [WebInvoke(Method = “GET”, ResponseFormat = WebMessageFormat.Json, UriTemplate = “returndata?s={s}”)] Stream EchoWithGet(string s); public string EchoWithGet(string s) { string json = @”jsoncallback({‘Status’:’OK’})”; Console.WriteLine(“Call Made: ” + s); return json; } 我已经尝试使用JSON.NET以及System.Web.Script命名空间来使用JavaScriptSerializer 。 但是没有什么对我有用,我真正想做的就是摆脱两个双引号。

从数据集中获取byte 并压缩

我从WCF操作返回一个自定义类。 使用的绑定是netTcp。 此自定义类包含多个数据成员。 其中之一是数据集。 根据特定操作,数据集可能很大。 我打算将数据集压缩为字节,然后返回自定义类。 根据读数,我提出了以下代码来从数据集返回压缩字节。 但不确定这是否是最佳方式(或正确的方法)。 你的想法。 ?? byte[] bytes = null; byte[] compressedBytes = null; using(var memory = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(memory, ds); bytes = memory.ToArray(); } using(var memory = new MemoryStream()) { using(var gzip = new GZipStream(memory, CompressionMode.Compress, true)) { gzip.Write(bytes, 0, bytes.Length); compressedBytes = memory.ToArray(); […]

NHibernate和WCF序列化(单向)

类型'[type]’的对象图包含循环,如果禁用参考跟踪,则无法序列化。 我有一个简单的类层次结构设置使用NHibernate作为我的持久层。 例如: public class Parent { public virtual IList Children{get;set;} } public class Child { public virtual Parent Parent{get;set;} } 这样做只是为了将Child与单个父级相关联,并通过数据库中的外键持久化。 NHibernate部分和持久性工作得很好。 通过WCF Web服务公开此关系时会出现此问题。 我意识到这里有一个循环引用并且已经阅读了一些LINQ to SQL的解决方案,允许单向序列化,但是在不使用dbml文件时无法找到解决方案。 UPDATE 另一个问题是,通常的做法是抽象一组DTO通过Web服务而不是原始实体公开吗? 这将解决序列化问题,因为DTO类不一定需要循环引用(因为它们不是NHibernate实体)。 其他更新 我发现了一篇可能正确方向的文章。 我目前正在对此进行测试,如果成功则会发布(因为文章值得)。

WCF中的静态变量

我有一些WCF服务。 这些服务在ASP.NET中运行。 我希望这些服务能够访问静态变量。 我的问题是,我不确定适当的服务器级存储机制在哪里。 我不想因为速度而使用数据库。 但是,我希望静态变量尽可能长时间保留在内存中。 事实上,如果可能的话,我希望它能保持到重新启动我的服务器。 任何人都可以提供任何想法吗?

如何将多个方法(带参数)作为参数传递?

假设我有以下WCF代码: try { ServiceClient proxy = new ServiceClient(); proxy.ClientCredentials.UserName.UserName = “user”; proxy.ClientCredentials.UserName.Password = “password”; proxy.GetData(2); if (proxy.State = CommunicationState.Opened) { proxy.GetData(“data”); } proxy.Close(); } catch (FaultException ex) { // handle the exception } 而且由于我注意到try … catch和其他逻辑是重复的,更不用说设置WCF调用是昂贵的,我想向这个函数发送许多“方法和参数”。 实质上将GetData(2)和GetData(“data”)作为方法数组传递,并使结果异步或同步返回。 我怎么做到这一点? 我想我可以有两个’ref’对象来处理结果[]和对结果[]的共享锁。 但是我不确定如何将“带参数的方法”作为参数传递给另一个函数。 也许另一种看待它的方法可能是一个函数指针数组,使用不同的参数来表示相同的函数。 任何人都可以推动我做正确的方法吗? 更多信息: 我问这个问题所以我可以优化这种方法来处理WCFexception和重试,但所以我不必总是在每次调用后打开/关闭客户端。

WCF服务自定义消息检查器

我构建了一个使用自定义用户名和密码身份validation的WCF服务,我正在使用以下代码从客户端应用程序进行测试: using (ServiceReferenceClient.TestServiceClient tc = new ServiceReferenceClient.TestServiceClient()) { tc.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None; tc.ClientCredentials.UserName.UserName = “User1”; tc.ClientCredentials.UserName.Password = “Pwd1”; tc.ServiceMethod(param1, param2, param3); } 它工作正常,但我需要看到发送到WCF服务和响应的实际SOAP请求。 我怎么能从我的客户那里做到这一点? 我知道我可能必须编写自己的自定义消息检查器,并想了解如何构建一个

一个WCF服务 – 两个客户端; 一个客户端不起作用

我有一个WCF服务和两个控制台应用程序客户端。 服务:使用WCSF Blue工具从wsdl联系人创建服务代码。 客户端1:此客户端使用通过浏览svc文件获得的wsdl。 此浏览的wsdl文件与合同wsdl文件略有不同。 客户端2:使用原始wsdl合同创建此客户端。 Cleint1工作正常。 客户端2无法正常工作。 什么都可能是潜在的问题? 两个客户端的App.Config文件看起来相似 – 只有名称更改。 我认为,问题将在客户端C#代码生成 – 最有可能在Action – ReplyAction中 。 这里有什么需要纠正的? 一个明显的区别在于Action和ReplyAction 客户1: Action =“urn:lijo:demos:multiplyservice:calculation:v1 / ICalculationService / GetMultiplied”,ReplyAction =“urn:lijo:demos:multiplyservice:calculation:v1 / ICalculationService / GetMultipliedRe”+“sponse” 客户2: Action =“urn:lijo:demos:multiplyservice:calculation:v1:getMultipliedIn”,ReplyAction =“*” 跟踪消息 由于EndpointDispatcher上的ContractFilter不匹配,因此无法在接收方处理Action’urn:lin:demos:multiplyservice:calculation:v1:getMultipliedIn’的消息。 这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配。 检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息,传输,无)。 编辑 这可以通过更改Action和ReplyAction来更正,如下所示(从服务中复制)。 [System.ServiceModel.OperationContractAttribute(Action = “urn:lijo:demos:multiplyservice:calculation:v1/ICalculationService/getMultiplied”, ReplyAction = “urn:lijo:demos:multiplyservice:calculation:v1/ICalculationService/getMultipliedRe” + “sponse”)] 注意:确保服务中的shell正确是很重要的(即,getMultiplied不是GetMultiplied) 从服务中复制不是一个好的选择,尽管它有效。 什么是正确的Action和ReplyAction? 另外,您能否指出如何修改wsdl以使ReplyAction在生成的客户端代理中正确 ? […]

Serialize.Linq在WCF代理层中不起作用

我使用Serialize.Linq发送并在WCF应用程序服务中的客户端和服务器之间接收Expression<Func>查询,因为Expression<Func>无法序列化 一切似乎都很好但是 当我添加引用此库到wcf代理层并添加服务器引用我的Web服务 构建我的项目时会遇到这样的错误 ExpressionNodeOfNewExpressionQsd8_SODT’ does not implement inherited abstract member ‘Serialize.Linq.Nodes.ExpressionNode.ToExpression(Serialize.Linq.ExpressionContext)’ ExpressionNodeOfTypeBinaryExpressionQsd8_SODT’ does not implement inherited abstract member ‘Serialize.Linq.Nodes.ExpressionNode.ToExpression(Serialize.Linq.ExpressionContext)’ etc … 似乎WCF为这个库创建自动生成的代理类而不是使用主类,而我将参考Serialize.Linq程序集添加到代理项目但没有帮助解决我的问题 您可以非常简单地测试并显示此问题 像这样 创建Wcf服务应用程序并将参考Serialize.Linq添加到项目 public interface IService1 { [OperationContract(Name = “GetByPredicate”)] List Get(ExpressionNode expression); [OperationContract] List Get(); } public class Person { public int ID { get; set; } public string Name { […]