在IIS 8.0中承載的wcf應用程序(.NET FW 4.0)中,我希望將具有兩個大字符串的複雜DataMember作爲參數發送。這些字符串可以達到20 MB或更多。首先我使用transferMode = Streamed,但我總是得到錯誤:傳輸具有大字符串的DataMember
Additional information: The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:request . The InnerException message was 'There was an error deserializing the object of type QCheckerService.Parameter. The maximum string content length quota (8192) has been exceeded while reading XML data. This quota may be increased by changing the MaxStringContentLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader.
我在配置文件中將readerQuotas全部設置爲max。但是錯誤與XmlDictionaryReaderQuotas有關。有沒有辦法避免在代碼中更改這些配額?
我現在有點困惑什麼可能是一個合適的解決方案。是默認的transferMode =緩衝正確的方式來做到這一點?
或者是不可能傳輸大的字符串,我應該用另一種方式?
如果我傳輸小字符串,它的工作原理。這裏是額外的配置。
客戶端的app.config:
<system.serviceModel>
<client>
<endpoint address=http://localhost:12412/Service1.svc
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IQChecker"
contract="QCheckerService.IQChecker">
</client>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IQChecker"
maxBufferSize="2147483647"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
transferMode="Streamed">
<readerQuotas maxDepth="32"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
服務的web.config:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<bindings>
<basicHttpBinding>
<binding name="Basic"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647"
maxBufferPoolSize="2147483647"
transferMode="Streamed">
<readerQuotas maxBytesPerRead="2147483647"
maxDepth="32"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
服務接口相關的數據成員
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "MyMethod", BodyStyle = WebMessageBodyStyle.Bare)]
ReturnValue MyMethod (Parameter request);
[DataContract]
public class Parameter: IDisposable
{
[DataMember]
String String1;
[DataMember]
String String2;
public void SetString1(String drawing)
{
String1 = drawing;
}
public String GetString1()
{
return String1;
}
public void SetString2(String configuration)
{
String2 = configuration;
}
public String GetString2()
{
return String2;
}
public void Dispose()
{
}
感謝您一些建議。
如果你想有一個正確的答案,包括您的相關web.config設置和至少一個方法簽名。 – EkoostikMartin
該問題可能在客戶端配置中,因此也包括客戶端配置文件。 – Sphinxxx
這個異常消息似乎明確地說明了問題所在。 –