Tag: wcf

最大数组长度配额

我正在编写一个小的WCF / WPF应用程序来调整图像大小,但当我尝试从客户端发送一个大小为28K的图像到我的服务时,WCF给了我很大的痛苦。 当我发送较小的图像时,该服务正常工作。 我马上认为这是一个configuration问题,我已经通过绑定configuration浏览了关于MaxArrayLength属性的post。 我已经把客户端和服务器上的这些设置的限制提高到了最大值2147483647,但仍然出现以下错误: 格式化程序尝试反序列化消息时引发exception:尝试反序列化参数http://mywebsite.com/services/servicecontracts/2009/01:OriginalImage时出错。 InnerException消息是“反序列化System.Drawing.Imagetypes的对象时发生错误。 读取XML数据时,超出了最大数组长度限额(16384)。 这个配额可以通过改变创buildXML阅读器时使用的XmlDictionaryReaderQuotas对象的MaxArrayLength属性来增加。 请参阅InnerException获取更多细节。 我已经使我的客户端和服务器configuration相同,他们看起来像下面:服务器: <system.serviceModel> <bindings> <netTcpBinding> <binding name="NetTcpBinding_ImageResizerServiceContract" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="10" maxReceivedMessageSize="2147483647"> <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> <security mode="Transport"> <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /> <message clientCredentialType="Windows" /> </security> </binding> </netTcpBinding> </bindings> […]

ContractFilter在EndpointDispatcherexception处不匹配

我有以下情况,我试图testing: 一个常见的WSDL WCF端点,它实现基于WSDL的对象并托pipe在IIS中。 使用基于WSDL的代理创build请求的客户端应用程序。 当我从客户端到服务端点进行Web服务调用时,出现以下exception: {“带有Action'http:// IMyService / CreateContainer '的消息由于EndpointDispatcher中的ContractFilter不匹配而无法在接收方处理,这可能是由于合同不匹配(发送方和接收方之间的操作不匹配)发送方和接收方之间的绑定/安全性不匹配检查发送方和接收方是否具有相同的合同和绑定(包括安全性要求,如消息,传输,无)。 我开始使用MS服务跟踪查看器,但不知道在哪里看。 在查看客户端和端点中的类时,它们显得完全相同。 如何开始debugging这个问题? 这个例外有什么可能的原因?

如何打电话给我的WCF服务asynchronous?

我有一个从Windows服务调用的WCF服务。 WCF服务运行一个SSIS包,该包可能需要一段时间才能完成,我不希望我的Windows服务必须等待它完成。 我如何使我的WCF服务调用asynchronous? (或默认是asynchronous?)

将FormsAuthentication cookie传递给WCF服务

我有一个与远程WCF Web服务交谈的网站。 两者都使用相同的自定义FormsAuthentication提供程序。 我想通过WCF服务来模拟当前login网站的用户进行身份validation。 我已经做了手动,使用UserName客户端凭据,但我需要知道用户密码。 那么,什么这么放屁是这样的:一个经过身份validation的用户发出请求,我创build一个服务客户端并设置他的凭据: serviceClient.ClientCredentials.UserName.UserName = username; serviceClient.ClientCredentials.UserName.Password = password; 但我真正想要的是直接传递FormsAuthentication cookie,因为我不想存储用户密码。 有任何想法吗?

在哪里存储当前WCF调用的数据? ThreadStatic是安全的吗?

当我的服务执行时,许多类将需要访问User.Current(这是我自己的用户类)。 我可以安全地将_currentUser存储在[ThreadStatic]variables中吗? WCF是否重用其线程? 如果是这样,什么时候清理ThreadStatic数据? 如果使用ThreadStatic是不安全的,我应该在哪里放置数据? 在OperationContext.Current里面有一个地方可以存储那种数据吗? 编辑12/14/2009:我可以断言,使用ThreadStaticvariables是不安全的。 WCF线程位于线程池中,并且ThreadStaticvariables不会重新初始化。

如何以编程方式将客户端连接到WCF服务?

我试图将应用程序(客户端)连接到公开的WCF服务,但不是通过应用程序configuration文件,而是在代码中。 我应该怎么做呢?

有时添加WCF服务引用会生成一个空的reference.cs

有时添加WCF服务引用会生成一个空的reference.cs,我无法在项目中的任何位置引用该服务。 有没有人遇到过这个?

WCF错误“对象图中可以序列化或反序列化的项的最大数目是'65536'”

我在WCF调用中收到以下错误: 在对象图中可以序列化或反序列化的项目的最大数目是'65536' 我已经阅读了大量的论坛post,其中许多人提到修改app.config和web.config来指定新的行为,以允许更大的对象图。 我已经这样做了,这是我在这些文件中的: WPF项目上的App.Config: <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name=""> <serviceMetadata httpGetEnabled="false" /> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name=""> <dataContractSerializer maxItemsInObjectGraph="2147483646"/> </behavior> </endpointBehaviors> </behaviors> <services> <service name="digiPM.Shell.LogOutPMSEMRService.PMSEMRLogOutService"> <!–<endpoint address="" binding="basicHttpBinding" contract="digiPM.Shell.LogOutPMSEMRService.IPMSEMRLogOutService"> <identity> <dns value="localhost" /> </identity> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="http://localhost:8732/Design_Time_Addresses/digiPM.Shell.LogOutPMSEMRService/PMSEMRLogOutService/" /> </baseAddresses> </host>–> <endpoint address="" binding="netTcpBinding" name="NetTcpBindingEndpoint" […]

将数据注入到WCF服务

我有像Miguel Castrobuild议的WCF服务。 这意味着我已经手动设置了一切,并有一个控制台应用程序托pipe我的服务使用ServiceHost对象。 我想保持我的服务类的精简,他们目前只是将调用传递给行为类。 我现在的问题是unit testing服务类。 我想注入一些东西作为一个构造参数的类,我可以嘲笑这一点,并写出适当的隔离unit testing。 ServiceHost类似乎不接受参数,所以我的问题是如何可以将数据注入服务类 – 或者我不能?

创buildWCF ChannelFactory <T>

我试图将现有的.NET Remoting应用程序转换为WCF。 服务器和客户端共享通用接口,所有对象都是服务器激活的对象。 在WCF世界中,这将与创build每个通话服务和使用ChannelFactory<T>创build代理类似。 我正在为如何为ASP.NET客户端正确创buildChannelFactory<T>而烦恼。 出于性能原因,我想cachingChannelFactory<T>对象,并且每次调用服务时都创build通道。 在.NET的远程处理date,曾经有RemotingConfiguration.GetRegisteredWellknownClientTypes()方法来获取我可以caching的客户端对象的集合。 看起来,在WCF世界里没有这样的事情,虽然我能从configuration文件中获取端点集合。 现在这是我认为会起作用的。 我可以创build这样的东西: public static ProxyHelper { static Dictionary<Type, object> lookup = new Dictionary<string, object>(); static public T GetChannel<T>() { Type type = typeof(T); ChannelFactory<T> factory; if (!lookup.ContainsKey(type)) { factory = new ChannelFactory<T>(); lookup.Add(type, factory); } else { factory = (ChannelFactory<T>)lookup[type]; } T proxy = factory.CreateChannel(); ((IClientChannel)proxy).Open(); return […]