2

WP7 を使用して Web サービスに送信しようとすると、このエラーが発生します。

メッセージを逆シリアル化しようとしているときに、フォーマッタが例外をスローしました: 操作 ' SubmitMobileData' の要求メッセージの本体を逆シリアル化中にエラーが発生しました。XML データの読み取り中に、文字列コンテンツの最大長クォータ (8192) を超えました。このクォータは、XML リーダーの作成時に使用されるオブジェクトのMaxStringContentLengthプロパティを変更することで増やすことができます。XmlDictionaryReaderQuotas行 178、位置 21。

私のWebサービスではないと思います。実際、私の WP7 は XML 内のデータをシリアル化しようとしています。さて、私の質問は、 をどのように設定するかですXmlDictionaryReaderQuotasMaxStringContentLength私のWP7アプリのプロパティ。デスクトップアプリのクライアントとWebサービス内で設定する方法を知っています。しかし、WP7 アプリの App.XAML ファイル内に設定することはできません。

編集: client.config を以下に投稿しました。サービスへの接続について知りたい人のために、サービス アドレスを公開しておくことにしました。この質問がうまくいけば答えられたら、wcf 接続を削除します。

<configuration>

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IMobileUtilities" maxBufferSize="2147483647" 
                maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://utopiapimp.com/services/MobileUtilities.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMobileUtilities"
            contract="PimpMobileService.IMobileUtilities" name="BasicHttpBinding_IMobileUtilities" />
    </client>
</system.serviceModel>

4

2 に答える 2

3

指定された例外は、次の場合にスローされます。

  1. Web サービスをホストしているアプリケーションがmaxStringContentLengthリーダー クォータを指定していない (したがって、デフォルトのクォータが使用されている) か、クォータの設定が低すぎます。
  2. 呼び出された Web メソッドの少なくとも 1 つの文字列引数の長さが、maxStringContentLengthリーダー クォータに違反しています。

例外が示すように、操作 ' SubmitMobileData 'の要求メッセージの本文を逆シリアル化するときにエラーが発生しました。

通常、シリアル化はクライアント側で行われ、逆シリアル化はサービス側で行われます。したがって、Web サービスで使用されるバインディングのリーダー クォータを追加 (または更新) して、各呼び出しが成功するmaxStringContentLengthのに十分な大きさの値を持つ属性を含める必要があります。SubmitMobileData

編集

サービスの構成を変更して、XML 要素のコンテンツの長さの制限を増やします。これを構成にコピーしないでください。単にマージしてください:

<system.serviceModel>
    <services>
        <service name="Server.MobileUtilities">
            <endpoint address="http://utopiapimp.com/services/MobileUtilities.svc"
                      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMobileUtilities"
                      contract="ServiceReferences.IMobileUtilities" />
        </service>
    </services>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IMobileUtilities">
                <!-- Content of each XML element can be up to 10 million characters. -->
                <readerQuotas maxStringContentLength="10000000" />
            </binding>
        </basicHttpBinding>
    </bindings>
</system.serviceModel>

編集:結局のところ、問題はサービスにあるようです。

問題がクライアント側にあった場合、取得している例外ではなく、次の例外がスローされます。

XML データの読み取り中に、文字列コンテンツの最大長クォータ (8192) を超えました。このクォータは、XML リーダーの作成時に使用される XmlDictionaryReaderQuotas オブジェクトの MaxStringContentLength プロパティを変更することで増やすことができます。

Silverlight アセンブリは WP7 アセンブリのサブセットであるため、クライアント側のリーダー クォータは常に最大値に設定されます。

これは、XmlDictionaryReaderQuotas クラス定義の一部です。

static XmlDictionaryReaderQuotas()
{
    maxQuota = new XmlDictionaryReaderQuotas(0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff);
}

public static XmlDictionaryReaderQuotas Max
{
    get
    {
        return maxQuota;
    }
}
于 2011-03-01T18:32:24.313 に答える
0

つまり、基本的にやりたいことは、WP7 アプリ接続の特性を変更することですよね? リモート メソッドを呼び出す前に、soapclient オブジェクトのインスタンスを作成してから、そのメソッドを呼び出す必要がありますOpenAsync()。このsoapclientを初期化すると、System.ServiceModel.Channels.Binding(). このバインディングをプログラムで作成し、そのセットで適切なmaxStringContentLength.

于 2011-03-02T12:29:35.757 に答える