2017-10-31 8 views
0

私はWCFサービスを持っています。AJAXを使用して、Webアプリケーションからサービスメソッドを呼び出しています。私のAJAXコールは以下の通りです。クライアント側のWCFサービスから返されたnullを処理します

$.ajax({ 
      type: 'GET', 
      url: 'http://localhost:56083/Service1.svc/Web/GetIntegrationById?id=' + value, 
      dataType: 'json', 
      processData: true, 
      contentType: "application/javascript", 
      success: function (data) { 
       console.log(data);      
      }, 
      failure: function (data) { 
       console.log("Failed " + data); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       console.log("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown); 
      } 
     }) 

この呼び出しは、検索機能を実装するために使用されています。 WCFサービスには、上記で呼び出されている以下のメソッドが含まれています。私は、検索テキストボックスに1~5の間の値を入力したときに下記

public Integration GetIntegrationById(string id) 
{ 
    IntegrationList integrationList = new IntegrationList(); 
    Integration integration; 
    integration = integrationList.CreateIntegrations().Where(i => id != null && i.IntegrationId == Convert.ToInt16(id)).FirstOrDefault(); 
    return integration; 
} 

CreateIntegrations()方法。(テスト目的のために作成された)

public Integration[] CreateIntegrations() 
    { 
     List<Integration> integrationList = new List<Integration>() 
     { 
      new Integration() { IntegrationId=1,... }, 
      new Integration() { IntegrationId=2, ... }, 
      new Integration() { IntegrationId=3, ... }, 
      new Integration() { IntegrationId=4, ... }, 
      new Integration() { IntegrationId=5, ... } 
     }; 
     Integrations = integrationList; 
     return integrationList.ToArray(); 
    } 

は、今はそれぞれの統合オブジェクトを取得します。しかし、上記のリストにないもの、例えばid = 8を入力すると、予想通りに、Webメソッドから返される統合の値はnullになります。これにより、クライアント側でパーサーエラーが発生するのは、JSONという値が予想され、解析に失敗したnullが返されます。そこで最後の行を

に変更しました
return integration ?? new Integration(); 

これは、クライアント側でnull以外の値を受け取ることを希望して行われました。ただし、これは以下のエラーで失敗します。

GET http://localhost:56083/Service1.svc/Web/GetIntegrationById?id=8 net::ERR_CONNECTION_RESET

私がここで間違って物事の十分にやっているかもしれませんが、私はサービスメソッドから返されたときにnull値を処理/管理する方法を知っておく必要があります。要求されたアイテムが存在しないシナリオをどうやって処理するのですか?どんな助けもありがたい。ありがとう。

+0

よりもむしろ 'Integration'クラスを返す、[HttpResponseMessage]を返す(https://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage(V = vs.118 ).aspx)また、 'contentType:" application/json "、' – Sajal

+0

@ Sajalを設定してください。実際、これは私が別の開発者が作業している別のサービスを作成したモックサービスです。そして、このサービスはWebアプリケーションとWindowsアプリケーションの両方を提供するので、実際にはできません。 – Akshatha

+0

'integration'がnullの場合に例外をスローして、クライアント側でそれがどのように受け取られるのか見ることができます。 – Sajal

答えて

0

ここで問題となるのは、入力が正しいか期待されている場合、成功した応答が返されます。つまり、統合変数はjsが認識する既知の値を保持しています。しかし、誤った入力に対しては、サービスからの戻り値がヌルで失敗するため、デシリアライズに失敗しています。

クライアント側のhtmlに$( '#id')。val()を仮定すると、入力IDの値が保持されます。そのモックサービス以来

$.ajax({ 
       type: 'Post', 
       url: 'http://localhost:56083/Service1.svc/Web/GetIntegrationById', 
       data: JSON.stringify({ id: $('#id').val() }), 
       dataType: 'json', 
       processData: true, 
       contentType: "application/json;charset=utf-8", 
       success: function (data) { 
        console.log(data);      
       }, 
       failure: function (data) { 
        console.log("Failed " + data); 
       }, 
       error: function (XMLHttpRequest, textStatus, errorThrown) { 
        console.log("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown); 
       } 
      }) 

、あなたは統合のクラスオブジェクトを作成し、appropriately.Iを微調整することをお勧めは確信しているあなたは、.NETアプリケーション内GetIntegrationByIdメソッドを呼び出した場合、統合オブジェクトがnullになりますから、それは失敗しますが、そのJS呼び出し以来、jsコンソールで黙って失敗しています。

Integration integration=new Integration(); 
+0

です。あなたがここで言及したものは、私がすでに認識しているものです。私が探しているのは、そのような醜いエラーが出ないように、それを扱うエレガントな方法です。そしてこの「統合インテグレーション=新しいインテグレーション()」では、これもやっていますし、違いはありません。最終結果はまだnullです。 – Akshatha

+0

投稿方法も試してみてください。あなたはどうですか? –

+0

申し訳ありませんが、私のサービスメソッドがnullを返すので、どのように違いが見られるのか分かりません。問題は、データの受け渡しではなく、NULL値を受け取って処理することにあります。 – Akshatha

関連する問題