zoukankan      html  css  js  c++  java
  • [转]silverlight向wcf传递大于8192字节(8k)的字符串

    默认情况下,silverlight在调用wcf时,如果传递的参数长度大于8192字节,即8k,会提示Not Found错误。
    解决方法如下:
    1、wcf服务端修改web.config 如下:
    01 <?xml version="1.0"?>
    02   
    03 <!--
    04   For more information on how to configure your ASP.NET application, please visit
    06   -->
    07   
    08 <configuration>
    09     <system.web>
    10         <compilation debug="true" targetFramework="4.0" />
    11     </system.web>
    12   <system.serviceModel>
    13     <behaviors>
    14       <serviceBehaviors>
    15         <!--注:此处的name值要跟下面的behaviorConfiguration值对应-->
    16         <behavior name="A">
    17           <serviceMetadata httpGetEnabled="true"/>
    18           <serviceDebug includeExceptionDetailInFaults="false"/>
    19           <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    20         </behavior>
    21       </serviceBehaviors>
    22     </behaviors>
    23     <services>
    24       <!--注1:此处的behaviorConfiguration值要跟上面的name值对应-->
    25       <!--注2:此处的name值不能随便修改,命名格式为:完全命名空间+类名 -->
    26       <service behaviorConfiguration="A" name="WCF_SL_8192.Web.WCF.HelloWorld">
    27         <!--注1:此处的contract值不能随便修改,命名格式为:完全命名空间+类名 -->
    28         <!--注2:此处的bindingConfiguration值要与下面 binding name中的name值对应-->
    29         <endpoint address="" bindingConfiguration="BBB" binding="basicHttpBinding" contract="WCF_SL_8192.Web.WCF.HelloWorld"/>      
    30       </service>
    31     </services>
    32     <bindings>
    33       <basicHttpBinding>
    34         <binding name="BBB" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
    35           <!--name=随意命名,但要与上面的bindingConfiguration="BBB"对应 -->
    36           <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647"/>
    37           <security mode="None"></security>
    38         </binding>
    39       </basicHttpBinding>
    40     </bindings>
    41   </system.serviceModel>
    42 </configuration>
    附:wcf的代码
    01 using System.ServiceModel;
    02   
    03 namespace WCF_SL_8192.Web.WCF
    04 {
    05     [ServiceContract]
    06     public class HelloWorld
    07     {
    08         [OperationContract]
    09         public int Test(string msg)
    10         {
    11             return msg.Length;
    12         }
    13     }
    14 }
    2、SL端修改ClientConfig如下:
    01 <configuration>
    02   <system.serviceModel>
    03     <bindings>
    04       <basicHttpBinding>
    05         <binding name="BasicHttpBinding_HelloWorld" maxBufferSize="2147483647"
    06              maxReceivedMessageSize="2147483647">
    07           <security mode="None" />
    08         </binding>
    09       </basicHttpBinding>
    10       <!--下面这个节点是关键-->
    11       <customBinding>
    12         <binding name="BasicHttpBinding_HelloWorld">
    13           <textMessageEncoding messageVersion="Default" writeEncoding="utf-8" />
    14           <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
    15         </binding>
    16       </customBinding>
    17     </bindings>
    18     <client>
    19       <endpoint address="http://localhost:1588/WCF/HelloWorld.svc"
    20           binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_HelloWorld"
    21           contract="WCF.HelloWorld" name="BasicHttpBinding_HelloWorld" />
    22     </client>
    23   </system.serviceModel>
    24 </configuration>
    附:SL的调用代码
    01 using System;
    02 using System.Windows;
    03 using System.Windows.Controls;
    04 using WCF_SL_8192.WCF;
    05   
    06 namespace WCF_SL_8192
    07 {
    08     public partial class MainPage : UserControl
    09     {
    10         public MainPage()
    11         {
    12             InitializeComponent();
    13   
    14             this.Loaded += new RoutedEventHandler(MainPage_Loaded);
    15   
    16   
    17         }
    18   
    19         void MainPage_Loaded(object sender, RoutedEventArgs e)
    20         {
    21             HelloWorldClient client = new HelloWorldClient();           
    22             client.TestCompleted += new EventHandler<TestCompletedEventArgs>(client_TestCompleted);
    23             System.Text.StringBuilder sb = new System.Text.StringBuilder();
    24             for (int i = 0; i < 100000; i++)
    25             {
    26                 sb.Append("A");
    27             }
    28             client.TestAsync(sb.ToString());
    29         }
    30   
    31         void client_TestCompleted(object sender, TestCompletedEventArgs e)
    32         {
    33             MessageBox.Show(e.Result.ToString());
    34         }
    35     }
    36 }
  • 相关阅读:
    第零次作业
    第一本书的学习笔记
    第一次作业
    第零次作业
    第一周作业
    第零次作业回复
    第零次作业
    第一周作业
    第0次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/wohenxinwei/p/2102786.html
Copyright © 2011-2022 走看看