1

Visual Studio 2010 と .NET Framework 4.0 を使用して、次のサンプルに基づいて AJAX 対応のシンプルな HelloWorld WCF サービスを構築しました: http://msdn.microsoft.com/en-us/library/bb924552.asp

ただし、大量のデータサービスに渡す必要があるため、それを行うためのテキスト領域と別のボタンを追加しました。残念ながら、数百行を超えるテキストを投稿すると、サーバーから 400 エラー (不正な要求) が返されます。

HelloWorldService.svc:

<%@ ServiceHost Language="VB" Debug="true" Service="HelloWorldAjaxWCFServiceWebApp.HelloWorldService"
CodeBehind="HelloWorldService.svc.vb" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>

HelloWorldService.svc.vb:

Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web

<ServiceContract(Namespace:="HelloWorldAjaxWCFServiceWebApp")>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class HelloWorldService

    <OperationContract()>
    Public Function Echo(ByVal data As String) As String
        Return data
    End Function

    <OperationContract()>
    <WebInvoke(Method:="POST")>
    Public Function HelloWorld(ByVal Name As String) As String
        If Name.Length > 100 Then
            Return "Hello " & Name.Substring(0, 100)
        Else
            Return "Hello " & Name
        End If
    End Function

End Class

HelloWorld.aspx:

<%@ Page Language="VB" AutoEventWireup="true" CodeBehind="HelloWorld.aspx.vb" Inherits="HelloWorldAjaxWCFServiceWebApp.HelloWorld" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Services>
            <asp:ServiceReference Path="HelloWorldService.svc" />
        </Services>
    </asp:ScriptManager>
    </form>
    <p>
        <input id="txtHello" type="text" value="Your Name Here" />
        <input id="btnHello" type="button" value="Hello World" onclick="return btnHello_onclick()" /></p>
    <p>
        <textarea id="txtLong" name="S1" rows="50" cols="50"></textarea>
        <input id="btnLong" type="button" value="Send Long Text"
            onclick="return btnLong_onclick()" /></p>
    <div id="Results"></div>
    <script language="javascript" type="text/javascript">
        // <!CDATA[

        function btnHello_onclick() {
            var txt = document.getElementById('txtHello');
            var service = new HelloWorldAjaxWCFServiceWebApp.HelloWorldService();
            //service.Echo('echo', onSuccess, FailedCallback, null);
            service.HelloWorld(txt.value, onSuccess, FailedCallback, null);
        }

        function btnLong_onclick() {
            var txt = document.getElementById('txtLong');
            var service = new HelloWorldAjaxWCFServiceWebApp.HelloWorldService();
            //service.Echo('echo', onSuccess, FailedCallback, null);
            service.HelloWorld(txt.value, onSuccess, FailedCallback, null);
        }

        function onSuccess(result) {
            alert(result);
        }

        // This is the failed callback function.
        function FailedCallback(error) {
            var stackTrace = error.get_stackTrace();
            var message = error.get_message();
            var statusCode = error.get_statusCode();
            var exceptionType = error.get_exceptionType();
            var timedout = error.get_timedOut();

            // Display the error.    
            var results = document.getElementById("Results");
            results.innerHTML =
                "Stack Trace: " + stackTrace + "<br/>" +
                "Service Error: " + message + "<br/>" +
                "Status Code: " + statusCode + "<br/>" +
                "Exception Type: " + exceptionType + "<br/>" +
                "Timedout: " + timedout;
        }

        // ]]>
    </script>
</body>
</html>

Web 構成ファイルからエントリ全体を削除したところ、上記のように動作します。私は web.config ファイルで多くの問題を抱えており、Web で提案されているさまざまな設定を試しています。明らかな効果がないものもあれば、Javascript で「サービスが未定義」エラーを引き起こすものもあるため、構成を「正しく」取得することが問題であることが証明されています。

大量のデータを受け入れるようにサービスを構成するにはどうすればよいですか? 次に、提供された回答について、特定の設定が実際に現実の世界にどのような影響を与えるか?

jquery はオプションではないことに注意してください。

ありがとう

4

1 に答える 1

1

最終的に、構成を最初からやり直すことでこの問題を解決しました。

于 2012-07-18T08:37:48.717 に答える