1

これは今日私を夢中にさせています。うまくいけば、ここの誰かが私がそれを解読するのを手伝ってくれることを願っています.

基本的に、jQuery で使用する WCF サービスを使用してテスト サイトを作成しました。3 つの方法があり、そのうちの 2 つは完全に機能します。

サービスは JSON を返します。3 つの方法があり、そのうちの 2 つは完全に機能します。3 つ目はそうではありません。その理由はわかりません。

これは私が知っていることです。

Visual Studio からサイトを起動すると、サービスを参照して、フォーマットされた JSON を表示できます。ブラウザ、つまり IIS バージョンで同じことをしようとすると、400 エラーが発生します。ただし、1 つの方法についてのみ - 他の方法は問題ありません。

私を困惑させたのはその矛盾です。

仮想ディレクトリではなく、IIS の Web サイトとして設定しました。参照するには、URL の形式はhttp://mytestsite.local です。

ウォークスルーに従って (WCF の作業を行ってからしばらく経ちました!)、web.config からサービス関連の構成情報を削除するというアプローチを取りました。代わりに、.svc ファイル内のクラス WebServiceHostFactory を参照する Factory 属性があります。

メソッドは次のとおりです。

    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
    public UserDTO[] GetUsers()
    {
        using (var dbContext = new GSChallengeContext())
        {
            var results = from u in dbContext.Users
                          select new UserDTO()
                          {
                              UserId = u.UserId,
                              Forename = u.Forename,
                              Surname = u.Surname,
                          };
            return results.ToArray();
        }
    }

    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
    public UserDTO[] GetUserById(int userId)
    {
        using (var dbContext = new GSChallengeContext())
        {
            var results = from u in dbContext.Users
                          where u.UserId == userId
                          select new UserDTO()
                          {
                              UserId = u.UserId,
                              Forename = u.Forename,
                              Surname = u.Surname,
                              DateOfBirth = (DateTime)u.DateOfBirth
                          };
            return results.ToArray();
        }
    }

    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
    public VehicleDTO[] GetVehiclesByUserId(int userId)
    {
        using (var dbContext = new GSChallengeContext())
        {
            var results = from v in dbContext.Vehicles
                          where v.UserId == userId
                          select new VehicleDTO()
                          {
                              VehicleId = v.VehicleId,
                              UserId = v.UserId,
                              Registration = v.Registration,
                              Alias = v.Alias,
                              Disabled = v.Disabled
                          };
            return results.ToArray();
        }
    }

これは、呼び出しを行うコードです。

    function ShowUserVehicleInfo()
    {
        var userId = $("#users").val();
        var outStr = "";
        $.getJSON('Services/GSChallenge.svc/GetVehiclesByUserId?userId=' + userId,
            function (data) {
                $.each(data, function (index, elem) {
                    outStr += "<div class=\"vehicleData\">" +
                            "<p>Registration: " + elem.Registration + "</p>" +
                            "<p>Alias: " + elem.Alias + "</p>" +
                            "<p>Disabled: " + elem.Disabled + "</p>" +
                            "</div>"
                });
            }
        );
    }

投稿する前に検索しましたが、問題を解決するもの、または役立つものはまだ見つかりません.

誰でも助けることができますか?

4

2 に答える 2

1

これにより、同様のシナリオの結果が得られました...

Web.config

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <standardEndpoints>
      <webHttpEndpoint>
         <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" defaultOutgoingResponseFormat="Json" />
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

GSCチャレンジの定義

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
 public class GSChallenge 
于 2012-10-22T00:30:46.310 に答える
0

原因に出くわしたようです。データベースのフィールドの 1 つを nchar(10) から nvarchar(10) に変更しました。ちょっと前に: 400 の不正な要求エラーはもうありません!

これで問題が解決した理由は完全にはわかりませんが、解決してよかったです!

于 2012-10-22T11:10:00.280 に答える