0

jqueryを介して呼び出すWCFAjax対応のWebサービスがあります。文字列を返すだけでテストすると、正常に返されます。さらにいくつかの機能を追加するとすぐに、javascriptエラーコールバックが有用なデータなしで実行されます。「エラー」、readystate = 0、status=0とだけ言います。

サービスコードをステップスルーすると、オブジェクトの配列が正常に返されます。ただし、クライアントはそうではありません。

これがコードです。

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WebAPI
{
    [OperationContract]
    [WebGet(ResponseFormat=WebMessageFormat.Json)]
    public Person[] GetPeople(Guid groupId)
    {
        using (SchedulerContext context = new SchedulerContext())
        {
            return context.People.Where(p=>p.Group_ID==groupId).ToArray();
        }
    }
}

そしてクライアントで:

<script type="text/javascript">
    $(document).ready(function () {
        $.ajax(
                {
                    type: "GET",
                    dataType: "json",
                    contentType: "json",
                    data: { groupId: 'ae09a080-5d7c-4e92-9a87-591574b7c4b8' },
                    url: "WebAPI.svc/GetPeople",
                    error: function (error) {
                        alert("error");
                    },
                    success: function (msg) {
                        alert(msg.d);
                    }
                }

        );
    });
</script>

更新: フィドラーで検査すると、httpの結果は504であり、「raw」応答タブには次のように表示されます。

HTTP/1.1 504 Fiddler - Receive Failure
Content-Type: text/html; charset=UTF-8
Connection: close
Timestamp: 13:52:46.107

[Fiddler] ReadResponse() failed: The server did not return a response for this request.

更新-2012/05/04:( ところで、みんなハッピースターウォーズの日です!) 問題はJSONのシリアル化にあることがわかりました。エンティティモデルで循環参照例外が発生します。まだ解決策に取り組んでいます。

4

2 に答える 2

0

この問題をデバッグするためにできることがいくつかあります。

  • サーバーでトレースを有効にします。エラー応答が返された場合は、何がうまくいかなかったかを説明する情報がトレースに含まれている必要があります
  • Fiddlerなどのネットワークキャプチャツール、またはほとんどのブラウザの開発者ツールを使用します(F12キーを押してアクセスし、[ネットワーク]タブに移動します)。実際の応答をキャプチャすることで、問題を特定するのに役立つ追加情報が応答に含まれているかどうかを確認できます。
  • 呼び出しのエラー関数で追加のパラメーターを使用します$.ajaxエラーコールバックは3つのパラメーター(jqXHR、textStatus、errorThrown)を取り、jqXHRにそのstatusまたはresponseTextプロパティを照会できます。これにより、エラーに関する詳細情報が得られます。
于 2012-05-04T00:40:00.780 に答える
0

サービスメソッド定義を以下に変更できますか?

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WebAPI
{
    [OperationContract]
    [WebGet(UriTemplate="GetPeople/{groupId}",ResponseFormat=WebMessageFormat.Json)]
    public Person[] GetPeople(Guid groupId)
    {
        using (SchedulerContext context = new SchedulerContext())
        {
            return context.People.Where(p=>p.Group_ID==groupId).ToArray();
        }
    }
}

次に、以下のリクエストを使用して、FiddlerからのGETリクエストを実行します。

GET http://localhost:15006/WebAPI.svc/GetPeople/739526F1-7C58-4E3B-97D8-4870948BFE32 HTTP/1.1
Content-Type: application/json
User-Agent: localhost

次に、jquery呼び出しから同じことを実行して、リクエストがどのように見えるかを確認します。

于 2012-05-04T13:28:39.883 に答える