silverlight里面用wcf上传数据,发现最大只能是64k,这个是由于它的默认设置为65536导致的,自己从新定义下httpbasicBinding ,behavior 就可以了,不过要注意命名规则,修改后最大可以达到4M,这个传输应该够大了,如果想上传大于4M的数据也可以,要修改httpRunTime,因为http默认的大小为4M,不过不建议修改。
默认情况下,silverlight在调用wcf时,如果传递的参数长度大于8192字节,即8k,会提示Not Found错误。
@R_403_6120@如下:
wcf服务端修改web.config 如下:
<?xml version="1.0"?>
<!--
For more @R_404_4329@ion on how to configure your ASP.NET application,please visit
@L_404_0@
-->
<configuration>
<system.web>
<compilation deBUG="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<!--注:此处的name值要跟下面的behaviorConfiguration值对应-->
<behavior name="A">
<serviceMetadata httpGetEnabled="true"/>
<serviceDeBUG includeExceptionDetailinFaults="false"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<!--注1:此处的behaviorConfiguration值要跟上面的name值对应-->
<!--注2:此处的name值不能随便修改,命名格式为:完全命名空间+类名 -->
<service behaviorConfiguration="A" name="WCF_SL_8192.Web.WCF.HelloWorld">
<!--注1:此处的contract值不能随便修改,命名格式为:完全命名空间+类名 -->
<!--注2:此处的bindingConfiguration值要与下面 binding name中的name值对应-->
<endpoint address="" bindingConfiguration="BBB" binding="basichttpBinding" contract="WCF_SL_8192.Web.WCF.HelloWorld"/>
</service>
</services>
<bindings>
<basichttpBinding>
<binding name="BBB" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<!--name=随意命名,但要与上面的bindingConfiguration="BBB"对应 -->
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"/>
<security mode="None"></security>
</binding>
</basichttpBinding>
</bindings>
</system.serviceModel>
</configuration>
}
}
}
2、SL端修改ClIEntConfig如下:
<configuration>
<system.serviceModel>
<bindings>
<basichttpBinding>
<binding name="BasichttpBinding_HelloWorld" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basichttpBinding>
<!--下面这个节点是关键-->
<customBinding>
<binding name="BasichttpBinding_HelloWorld">
<textMessageEnCoding messageVersion="Default" writeEnCoding="utf-8" />
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
</customBinding>
</bindings>
<clIEnt>
<endpoint address="http://localhost:1588/WCF/HelloWorld.svc"
binding="basichttpBinding" bindingConfiguration="BasichttpBinding_HelloWorld"
contract="WCF.HelloWorld" name="BasichttpBinding_HelloWorld" />
</clIEnt>
</system.serviceModel>
</configuration>
如果传送的对像超过4M的情况下。则需修改 web.config里的 httpruntime.
-----
<configuration>
<system.web>
<httpRuntime maxRequestLength="8000"
enable = "True"
requestLengthdiskThreshold="512
useFullyQualifIEdRedirectUrl="True"
executionTimeout="45"
versionheader="1.1.4128"/>
</system.web>
</configuration>
httpRuntime是配置asp.net http运行时设置,以确定如何处理对asp.net应用程序的请求。
executionTimeout:表示允许执行请求的最大时间限制,单位为秒
maxRequestLength:指示 ASP.NET 支持的最大文件上载大小。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4 MB)。
useFullyQualifIEdRedirectUrl:表示指示客户端重定向是否是完全限定的(采用 "http://server/path" 格式,这是某些移动控件所必需的),或者指示是否代之以将相对重定向发送到客户端。如果为 True,则所有不是完全限定的重定向都将自动转换为完全限定的格式。false 是默认选项。
minFreeThreads:表示指定允许执行新请求的自由线程的最小数目。ASP.NET 为要求附加线程来完成其处理的请求而使指定数目的线程保持自由状态。默认值为 8。
minLocalRequestFreeThreads:表示ASP.NET 保持的允许执行新本地请求的自由线程的最小数目。该线程数目是为从本地主机传入的请求而保留的,以防某些请求在其处理期间发出对本地主机的子请求。这避免了可能的因递归重新进入 Web 服务器而导致的死锁。
appRequestQueuelimit:表示ASP.NET 将为应用程序排队的请求的最大数目。当没有足够的自由线程来处理请求时,将对请求进行排队。当队列超出了该设置中指定的限制时,将通过“503 - 服务器太忙”错误信息拒绝传入的请求。
enabLeversionheader:表示指定 ASP.NET 是否应输出版本标头。Microsoft Visual Studio 2005 使用该属性来确定当前使用的 ASP.NET 版本。对于生产环境,该属性不是必需的,可以禁用。
以上是内存溢出为你收集整理的Silverlight 向 WCF 传送大对像全部内容,希望文章能够帮你解决Silverlight 向 WCF 传送大对像所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)