2009-07-21 41 views
1

私は、テストページのjQueryからクロスドメインコールとしてローカルに実行されているWCF WebサービスへのJSONP呼び出しを正常に作成しようとしています。私はある時点で、1012のURIでエラーを拒否されたか、Xmlで応答を受け取ったか、まったく応答がなかったかのいずれかです。現在、私が持っている方法は、それはそれは私がこのWebサービスを書いていないので、私がどこか構成設定をしないのですということは完全に可能であるが、私はとてもイライラになった1012jQueryからWCFへのJSONP呼び出しを完了できません

をバック吐くように構成しました私はここで尋ねるだけで生産性が向上するだろうと考えています。みんなありがとう。以下の詳細。クロスドメインのJSONP呼び出しを経由して、私はjQueryのテストページからこのメソッドを呼び出すしようとしています

[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public decimal GetOrderStatusJson(int jobId) 

は、私は次のような方法でWCF Webサービスを持っています。以下は

<script type="text/javascript"> 
    getJsonAjaxObject(
    "http://localhost:3960/ProcessRequests.svc/json/GetOrderStatusJson", 
    { "jobId": 232 }); 


    function getJsonAjaxObject(webServiceUrl, jsonData) { 
     var request = { 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: webServiceUrl, 
      data: jsonData, 
      dataType: "jsonp", 
      success: function(msg) { 
       //success! 
       alert("blah"); 
      }, 
      error: function() { 
       //oh nos 
       alert("bad blah"); 
      } 
     }; 


     $.ajax(request); 
    } 
</script> 

私は、この目的のために設定してweb.configの塊です:

<services> 
    <service behaviorConfiguration="MWProcessRequestWCF.ProcessRequestsBehavior" 
    name="MWProcessRequestWCF.ProcessRequests"> 
     <endpoint address="json" behaviorConfiguration="AspNetAjaxBehavior" 
     binding="webHttpBinding" contract="MWProcessRequestWCF.IProcessRequests" /> 
     <endpoint address="" binding="wsHttpBinding" contract="MWProcessRequestWCF.IProcessRequests"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
     <behavior name="MWProcessRequestWCF.ProcessRequestsBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
     <behavior name="AspNetAjaxBehavior"> 
      <enableWebScript/> 
     </behavior> 
    </endpointBehaviors> 
</behaviors> 

答えて

4

JSONPはjQueryを使って仕事を得るために、あなたはこのようなあなたのコールバックを指定する必要があります:「?myurlコールバック=」

(jqueryのドキュメントhere

また、Webサービスはjavascript呼び出しでレスポンスをラップする必要があります。例: ServiceName.svc /メソッド名jscallback = mycallback

返す

mycallback(JSON文字列)。

このような実装が必要なときに、「jscallback」クエリーストリング・キーの着信要求を監視するHttpModuleを作成しました。クエリー文字列でコールバックが指定されていた場合、HttpModuleはカスタムレスポンスフィルタを添付して、上記のようにjsonを "ラップ"します。

0

[ScriptMethod]は、ASMX Webサービスのためではなく、WCFのためです。

関連する問題