2

私は Web アプリケーションの経験があまりなく、動作していると思ったときに何かがうまくいかないことがあります。私はオンラインで C# のデモを学習し、正常に動作するように見える独自の単純なバージョンを作成しました。何らかの入力を受け取り、それを Web サービスに渡すだけです。次に、より複雑なアプリケーションに同様の Web サービスを実装しようとしましたが、次のエラーが表示されますが、それが機能しない理由が明確に示されていません。

the server responded with a status of 500 (Internal Server Error) 

これはブラウザー デバッガー内にあり、その理由は明確ではありません。

Web サービス URL:hostlocal:xxxxx/SVC/contact.asmx/ContactMessage

私のWebサービスコードは次のとおりです:

<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
 <ToolboxItem(False)> _
Public Class contact
Inherits System.Web.Services.WebService

<WebMethod()> _
Public Function ContactMessage(ByVal clientProj As String, email As String, message As String) As String


    Dim insert_succes As Integer = load_data("", clientProj, "", "", "", "", "", "", "", "", email, message, "")
    Dim passedValidation As Boolean = True

    ' here you can return a flag which you can handle on client side accordingly
    ' if you need to

    Return If(passedValidation, "1", "0")

End Function

そしてそれを呼び出すJavaScript:

var dojoXhr;

 require(["dojo/parser", "dojo/query", "dojo/dom-class", "dojo/dom-style", 
    "dojo/on", "dojo/_base/event",
"dojo/request/xhr", "dijit/form/ValidationTextBox", "dojo/domReady!"],
function (parser, query, domClass, domStyle, on, event, xhr) {

    parser.parse();

    var btnSubmit = document.getElementById('btnSubmit');

    function correctInput(div, td, msg) {
        domStyle.set(div, 'display', '');
        td.innerHTML = msg;
    }

    on(btnSubmit, 'click', function (e) {
        event.stop(e);
        var clientProj = dijit.byId("clientName").get("value");
        var clientKey = dijit.byId("clientKey").get("value");
        var accessToken = dijit.byId("accessToken").get("value");
        var lusername = dijit.byId("lusername").get("value");
        var lpassword = dijit.byId("lpassword").get("value");
        var provid = dijit.byId("provID").get("value");




        var feedback = document.getElementById('feedback');
        var feedbackTD = query('td.feedback')[0];

        domStyle.set(feedback, 'display', 'none');

        if (!validateEmail(lusername)) {
            correctInput(feedback, feedbackTD, 'Please enter a valid email.');
            return;
        }

        var port = document.location.port;
        var xhrPath = '//' + document.location.hostname + (port == (80 || 443) ? '/' : ':' + port + '/') + 'SVC/contact.asmx/ContactMessage';

        var msgbody = {
            clientProj: clientProj,
            clientKey: clientKey,
            accessToken: accessToken,
            lusername: lusername,
            lpassword: lpassword,
            provid: provid
        };

        xhr(xhrPath, {
            headers: { "Content-Type": "application/json; charset=utf-8" },
            method: 'post',
            data: JSON.stringify(msgbody)
        }).then(function (data) {
            if (data == "0") {
                correctInput(feedback, feedbackTD, 'Your message could not be sent.');
                return;
            }
            alert('Bcrap STILL NOT WORKING NOW!');
            // show feedback to the user
            domStyle.set(feedback, 'display', '');
            domStyle.set(document.getElementById('msgBodyOutter'), 'display', 'none');
            feedbackTD.innerHTML = "Message was sent successfully.";
        });
    })
});
4

2 に答える 2

1

サービスは、エラーをトラップしてイベント ログ (または何か) に書き込むために何らかの例外処理を行うことができるため、何が起こっているかを確認できます。または、Visual Studio を使用してデバッグ モードで実行し、テストを発行します。ブレークポイントでキャッチされ、ステップ スルーして問題の内容を確認できます。

于 2013-07-11T15:41:16.560 に答える
1

問題が何であるかを突き止め、それは xhr 関数に関連していました。基本的に、渡されるパラメーターは、コード ビハインドの名前と番号が一致する必要があります。

于 2013-07-11T18:55:11.313 に答える