2012-01-04 14 views
0

検索しましたが、まだ解決策が見つかりませんでした。JSONでWebサービスリファレンスにアクセスしてもWebサービスが見つかりません

Webサービス "costService.asmx"をJSONでクライアントサイドにアクセスして、asp:chartをリアルタイムで更新する場合、JSONからWebサービス "costService"が見つかりませんでした。

私はほとんどすべて試してみた:コードは動作しますが、私は自分のサービスで使用する場合、それが機能しないこと http://encosia.com/using-jquery-to-consume-aspnet-json-web-services/

:私はこれを踏襲し を。

私は二つのプロジェクトとして私のサービスおよびサイトを分離しているからだと、ほぼ確信している

<webServices> 
    <protocols> 
     <add name="HttpSoap"/> 
     <add name="HttpPost"/> 
     <add name="HttpGet"/> 
     <add name="Documentation"/> 
     <add name="HttpPostLocalhost"/> 
    </protocols> 
</webServices> 

を追加しました。私のサイトには "CostServiceProxy"と呼ばれるsreviceリファレンスがあり、私のサイトのそのサーバー側を問題なく使用できます。

JSONで「CostServiceProxy」、つまりサービス参照を使用するにはどうすればよいですか?

クライアント側のコード:

$(function() { 
     //intercept the onchange event fire by element 
     //with "graphType" ID (SELECT) 
     $(".ddlChartType").change(function() { 
      //get the attribute "value" of the OPTION 
      //element selected and pass it as parameter 
      getChartImage($("option:selected", this).attr("value")); 
     }); 
    }); 

    function getChartImage(type) { 
     if (type < 0) return; 

     //create the object for passing data to Web Service 
     var dataPassed = new Object(); 
     dataPassed.iType = type; 

     //call a Web service with jQuery 
     $.ajax({ 
      type: "POST", 
      url: WebServiceURL + "/DrawChart", 
      data: $.toJSON(dataPassed), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { var data = $.evalJSON(msg).d; $("#ChartArea").attr("src", data); }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.responseText); } 
     }); 
    } 

サーバー私が側:

CostServiceProxy.CostServiceSoapClient client = new CostServiceProxy.CostServiceSoapClient(); 

はサービスからmethodesやオブジェクトを使用します。

編集

マイWebServiceクラス:そのクラス内の

namespace CostService { 
/// <summary> 
/// Summary description for CostService 
/// </summary> 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
//To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService] 
public class CostService : System.Web.Services.WebService { 

マイMethodeの:

[WebMethod] 
public String DrawChart(Int32 iType, double CostToRender) { 

私はfirebigの純タブの下を見ると、私は以下を参照してください。 500 internal server error POST DrawChart 編集II

私は自分のサイトでdefault.aspxコードの上にメソッドを置くことで作業するようになっています。まだいくつかの不完全さがありますが、データを含むグラフが表示されます。 ウェブサービスのURLに変更したときに動作するかどうか試してみます。

+2

(例えば、Firebugのネットワークパネル経由で)サービスからヘッダ戻り値を確認し、 'Content-Type:text/javascript'を返すことを確認してください。 ajax呼び出し( '$ .getJSON()'が好きですが)が間違ったコンテンツタイプであれば失敗します。 –

+0

あなたのWebサービスは '[System.Web.Script.Services.ScriptService]'デコレータで飾られていますか?通常、最初にサービスを作成するとコメントアウトされます。あなたのクラスはスクリプトから呼び出されるためにこのデコレータを必要とします。 – lsuarez

+0

私はそのコメント部分を見落としましたが、私はそれを手作業ですでに追加しましたが、それはまだ機能しませんでした。 私は別のプロジェクトとして持っているのはどうですか? –

答えて

0

サービスを一切変更していない場合は、サービスクラスが[ScriptService]属性で修飾されていることを確認する必要があります。これは、コンテンツタイプがapplication/jsonでPOSTするとJSONで応答できるようにするものです。この属性がなければ、XMLを取得するだけです(POST中のJSONパラメータ文字列の解釈方法もわかりません)。

関連する問題