0

PageMethodとそのメソッドへのAJAX呼び出しがあり、製品SKUの配列と要求されたSKUの数を渡します。DEV(IIS7)では完全に正常に動作しますが、PROD(IIS6)では500エラーが返されます。

Message: Object reference not set to an instance of an object. 
StackTrace: at ViewProduct.GetInventory(List`1 orderedSkus)
ExceptionType: System.NullReferenceException

関連するコードは次のとおりです。web.configから特定のスニペットが必要な場合は、それらを取得することもできますが、何かに影響を与えるようなものはありません。

PageMethodで2つの異なるオブジェクト定義、orderedSkus As Object()とorderedSkus As List(Of Object)を使用しようとしました。同じ違いですが、同じ結果です...null参照。

AJAX:

    var editedSkus = [];
    function checkInventory() {
        editedSkus.length = 0;
        var textBoxes = $('input:text', '.table-orderMatrix');
        if (formEdited(textBoxes)) {
            var DTO = { 'orderedSkus': editedSkus };
            $.ajax({
                type: "POST",
                url: BasePath + "ViewProduct.aspx/GetInventory",
                data: JSON.stringify(DTO), 
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function (msg) {
                    var skus = msg.d;
                    $.each(skus, function () {
                        //do stuff
                    });
                }
            });
        } else {
            // Do other stuff
        }
    }

    var formEdited = function (textBoxes) {
        var edited = 0;
        $.each(textBoxes, function (i) {
            if (this.value > 0) {
                var sku = {};
                sku.skuNumber = $(this).prev().val();
                sku.orderAmount = this.value;
                editedSkus.push(sku);
                edited += 1;
            }
        });
        return edited;
    }

PAGEMETHOD:

    <WebMethod()> _
Public Shared Function GetInventory(orderedSkus As List(Of Object)) As List(Of Object)
    Dim _skus As SKUCollection
    Dim _sku As SKU = Nothing
    Dim warnings As New List(Of Object)
    Dim qty As Integer
    _skus = CurrentStyle.SKUs

    For Each _orderedSku As Object In orderedSkus
        Dim dicValues As New Dictionary(Of String, Object)()
        dicValues = DirectCast(_orderedSku, Dictionary(Of String, Object))
        Dim orderedSkuNumber As String = dicValues("skuNumber").ToString()
        Dim orderAmount As String = CType(dicValues("orderAmount"), Integer)

        Try
            'Stuff
        Catch ex As Exception
            'Health Monitoring
        End Try
    Next

    Return warnings

End Function

編集:PRODがIIS6(機能しない)の下にある間に、DEVサーバーがIIS7(ページメソッドが機能する場所)を実行しているという「マイナーディテール」を追加します。私は知っています...私を始めさせないでください。状況に影響を与えるかもしれないと思うので、これを追加します。

4

1 に答える 1

1

私はそれを考え出した。オブジェクトは問題なく渡されていました。ただし、PRODで正常に機能するPRODのTry ... Catchで少しのコードが失敗していました(これはAJAX呼び出しとはまったく関係ありませんでした)。次に、適切なエラーメッセージを提供する代わりに(Catchにエラー処理を追加した後でも)、送信したオブジェクトがnullであるというエラーを受け取りました。奇妙ですが、そこに行きます。

于 2012-11-01T17:55:07.833 に答える