Tag: #wcf

使用CreateMap的实例版本和使用WCF服务映射?

与automapper有一些实际问题。 我想我找到了解决方案但不确定如何实现它。 基本上我使用ResolveUsing和ConstructedBy的自定义映射将params传递给构造函数,我知道大多数人在global.asax中设置了一次而忘记了它。 但问题是我的方法(在wcf上)将不同的参数传递给ResolveUsing的构造函数…… 在我使用静态方法的Mapper.CreateMap和Mapper.Map之前,看来当不同的请求通过方法(多用户)进入wcf服务时,它们彼此冲突。 看完之后,我可以使用CreateMap和Map的实例版本,这样每个请愿书都可以获得自己的地图并传入自己的参数。 但我似乎无法找到如何做到这一点。 谁能解释一下吗? 我真的被困了…… 在一次又一次之前,我会得到重复的键错误,并且我在构造函数上添加了一个日志跟踪,看起来1请求覆盖了另一个 – 因此是静态版本的Mapper。 好吧,我希望我是对的,但我找不到别的…… 编辑 – 我有什么例子 基本上所有映射都正常工作,因为我在大多数情况下使用MapFrom。 然后我创建一个我的Resolver实例,我在URL中传递。 在我传递之前我检查了url并且它是正确的。 但是一旦它返回它就会返回错误的URL。 我需要在URL中传递的原因是它有变量,所以我需要替换变量…基本上有两个url取决于办公室,我到处都有日志,我可以看到我传递的内容但是一次我把它传递进去 – 它不是我传入的那个,如果这是有道理的,这很奇怪! 它是一个WCF服务和一个客户端调用该方法两次通过2个不同的办公室,因此2个不同的URL。 但是它们总是返回相同的URL。 就好像一个会话正在覆盖另一个会话…… 我希望这是有道理的。 SalesPointResolver newSalesPointResolver = new SalesPointResolver(returnReservationUrl, reservationSite.ReservationUrl, startDate, endDate, officeCode); Mapper.CreateMap() .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id)) .ForMember(dest => dest.TaxIncluded, opt => opt.MapFrom(src => src.Segments.FirstOrDefault().TaxIncluded)) .ForMember(dest => […]

KeepAlive与WCF和TCP?

我有一个Windows服务托管高级WCF服务,通过TCP(netTCP)与protobuf.net进行通信,有时也使用证书。 receiveTimeout设置为无限,永不丢弃由于不活动而导致的连接。 但从我的理解,无论如何都可以删除连接,所以我创建了一个简单的双向keepalive服务方法,客户端每9分钟调用一次以保持连接活动。 连接永远不会中断是非常重要的。 这是正确的方法吗? 或者我可以简单地删除我的保持,因为receiveTimout设置为无限? 编辑:WCF服务的当前app.config: http : //1drv.ms/1uEVKIt

WCF TCP的速度比HTTP快多少

我知道TCP对于WCF比HTTP更快,但我很想知道多少。 我对使用HTTP的大型应用程序存在性能问题,并且正在考虑转向netTcp是否会产生足够的性能提升以使投资变得有价值。 有谁知道netTCP发送的数据与Http绑定相比有何不同?

如何使用SvcUtil.exe生成WCF服务

我正在使用SvcUtil.exe从wsdl文件生成IClassName.cs文件,这是正常的。 我的问题是我不知道如何使用SvcUtil.exe的命令参数生成ClassName.svc文件。 运行SvcUtil.exe后,我希望得到WCF服务,就像从Visual Studio向导创建包含所有类* .svc,*。cs和接口的服务一样。 谢谢,Skrch

教程:简单的WCF XML-RPC客户端

更新:我在下面的回答中提供了完整的代码示例。 我已经构建了自己的小型自定义XML-RPC服务器,因为我想在服务器端和客户端都保持简单,我想要完成的是使用WCF创建一个最简单的客户端(最好是C#) 。 假设通过XML-RPC公开的服务合同如下: [ServiceContract] public interface IContract { [OperationContract(Action=”Ping”)] string Ping(); // server returns back string “Pong” [OperationContract(Action=”Echo”)] string Echo(string message); // server echoes back whatever message is } 因此,有两个示例方法,一个没有任何参数,另一个带有简单的字符串参数,两个都返回字符串(仅为了示例)。 服务通过http公开。 Aaand,下一步是什么? 🙂

如何在wcf restful服务中传递多个参数?

IService.cs [OperationContract] [WebGet(UriTemplate = “/IsValidUser?userid={userid}&password={password}”, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] string IsValidUser(string userid, string password); Service.cs public string IsValidUser(string userid, string password) { if (userid ==”bob” && password ==”bob”) { return “True”; } else { return “false”; } } web.config中 问题: 这里我的问题是我想在调用WCFrest服务时传递多个参数,但我无法将多个参数传递给该WCFrest服务。 我想传递用户ID和密码并检查它。 如果它是bob然后允许继续。 当我打电话给这个url时: http://localhost:48401/ARService/Service.svc/rest/IsValidUser?userid=bob&password=bob 然后我在我的网页上收到此错误: 端点未找到。 请参阅服务帮助页面以构建对服务的有效请求。 如果有人知道如何使用此函数参数调用IsValidUser 。 请帮我。

WCF:使用消息合同流式传输

我正在尝试使用带有消息合同的WCF流,因为我需要在流本身旁边添加其他参数。 基本上我正在创建一个文件上传和下载服务,顶部还有一些额外的逻辑。 不幸的是,当我尝试从浏览器点击服务以检查一切正常时,我收到以下错误: ‘/’应用程序中的服务器错误。 合同’IFileTransferService’中的操作’UploadFile’使用具有SOAP头的MessageContract。 None MessageVersion不支持SOAP标头。 不幸的是谷歌搜索它并没有产生任何帮助我的重要结果。 你们能帮助我吗? 这里的服务细节(我已经删除了下载部分的空间原因)。 [ServiceContract(Namespace = “http://www.acme.org/2009/04”)] public interface IFileTransferService { [OperationContract(Action = “UploadFile”)] void UploadFile(FileUploadMessage request); } [MessageContract] public class FileUploadMessage { [MessageHeader(MustUnderstand = true)] public FileMetaData Metadata { get; set; } [MessageBodyMember(Order = 1)] public Stream FileByteStream { get; set; } } [DataContract(Namespace = “http://schemas.acme.org/2009/04”)] public class […]

wcf条件压缩

我最近插入了一个自定义编码器(使用二进制编码器进行实际编码,使用Gzip压缩器来压缩字节数组)。 它工作正常。 现在的问题是对于小的消息大小,它实际上膨胀了字节数组。 我想知道是否有办法避免这种情况。 特别是如果有办法我可以应用条件压缩和解压缩。 我确实尝试过这样的事情 – 放置一个条件 if(buffer.Count <= 5000) skip compression 但问题是另一方面即使字节未被压缩也会发生解压缩。 我希望这是有道理的。 以下是压缩和解压缩发生的函数(来自CompactMessageEncoder的代码片段) public override Message ReadMessage(ArraySegment buffer, BufferManager bufferManager, string contentType) { ArraySegment decompressedBuffer = DecompressBuffer(buffer, bufferManager); LogWrite(“Decompressed from {0} bytes to {1} bytes”, buffer.Count, decompressedBuffer.Count); Message returnMessage = _innerEncoder.ReadMessage(decompressedBuffer, bufferManager); returnMessage.Properties.Encoder = this; return returnMessage; } public override ArraySegment WriteMessage(Message […]

大二进制(byte )通过WCF传输文件

我正在尝试构建一个WCF服务,允许我从客户端向服务发送大型二进制文件。 但是我只能成功传输高达3-4MB的文件。 (当我尝试转移4.91MB时,我失败了,当然,除了之外) 如果我尝试发送4.91MB文件,我得到的错误是: exception消息:接收到http:// localhost:56198 / Service.svc的HTTP响应时发生错误。 这可能是由于服务端点绑定不使用HTTP协议。 这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭)。 请参阅服务器日志以获取更多详 内部exception消息:基础连接已关闭:接收上发生意外错误。 内部exception消息:无法从传输连接读取数据:远程主机强制关闭现有连接。 内部exception消息:远程主机强制关闭现有连接 只要将byte []文件作为方法参数发送到公开的服务方法,就会在客户端发生此错误。 我在服务方法的第一行有一个断点,如果文件传输成功(低于3MB),则会触发断点并传输文件。 但是在这种情况下,只要调用该方法,就会出现错误。 如果出现此错误,则不会触发服务中的断点。 我将粘贴我的Service Web.config和Asp Page(Client)Web.config的各个部分。 如果您还需要发送文件并接受文件的代码,请告诉我,我也会发送。 服务Web.Config 客户端(Asp.net页面)Web.Config

尝试添加服务引用会导致错误请求(400)在一个项目中,否则运行正常

我处于一种微妙的情况:正如标题所示,我似乎无法连接到我在Windows服务中包含的WCF服务。 我按照教程http://msdn.microsoft.com/en-us/library/ms733069%28v=vs.110%29.aspx的每一步,让它以这种方式多次工作,只是针对一个特定的方式项目。 我真的不知道它是什么,我有一个非常简单的界面只有一个方法作为合同,我的服务安装得很好,也开始很好。 一旦我尝试在另一个项目中添加服务引用,我收到错误400,错误请求和元数据问题。 我甚至重新编写了原型项目(它基本上是同一个项目,在合同的实现中代码较少;但我们仍在谈论仍然低于300行代码)运行完全正常,并出现了同样的错误。 当我这样做时,我没有更改任何app.config代码,之前我可以连接,但事后却提出了不好的请求。 问题的另一个原因是我不能在这里发布任何代码(我正在工作的虚拟机上工作,我没有互联网访问权限,加上我在物理机上实际拥有的互联网访问权限是如此受限制我无法打开任何类型的主板/论坛/博客/无论如何,所以我无法发布确切的错误)。 由于我所有的最小例子都有效,我的“最小不工作示例”无论如何都是总代码。 我在这里完全失败了。 我挖掘了错误请求错误的所有其他主题并明天要做更多检查,但我想我只是发布在这里,并且可能会得到一些关于如何/如何进一步测试我的项目错误的建议。 为了防止它, app.config与以下内容相同,但服务和合同名称除外: 什么可能从头开始三次尝试工作,但第四次不再工作,唯一的区别是文件的大小和2个没有做其他事情的辅助类? 我的意思是,服务必须在那里,否则我会得到404 Not Found错误,但是元数据有问题,尽管我在另一个尝试中使用了完全(!)相同的app.config并且它可以工作。 任何建议/提示都非常感谢。 我肯定会尝试在明天增加绑定中的缓冲区大小,我听说这对一些人有帮助,但我不知道我在那里,因为我还没有发送任何东西,是吗? 我只是想添加服务引用,我不知道大小是否重要。 我也已经尝试过TCP和basicHTTP绑定到相同的结果。 在此先感谢并抱歉文字墙; 我今天的工作非常沮丧,甚至由于那些愚蠢的工作条件甚至无法正确研究错误,并且再次写下这个挫折… …)