2011-09-02 16 views
2

jQueryを使用してaspxページからjson wcfメソッドを呼び出して質問があります。 IISに展開jQueryを使用してJSON wcfサービスを呼び出します。

[ServiceContract] 
    public interface IEParcelService 
    { 
     [OperationContract] 
     [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "Test")] 
     Response<string> Test(); 
    } 

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class EParcelServiceImpl : IEParcelService 
    {  
    public Response<string> Test() 
    { 
     return WebServiceHelper.Execute(() => "Test Message"); 
    }  
    } 

このサービス:

これは私の試験方法です。 Chromeからこのメソッドを呼び出すと、http://localhost/TestService/ServiceImpl.svc/Test すべてが正常で、結果が表示されます。しかし、私がjQueryから呼び出すとき 私はエラーがあります:NETWORK_ERR:XMLHttpRequest Exception 101.私はGoogleで解決策を見つけようとします。 しかし結果は成功しませんでした。どのように私はそれを解決することができます?

jQueryのコール:

<script language="javascript"> 
    $().ready(function() { 
      $("#myButt").click(function() { 

       $.ajax({ 
        cache: false, 
        async: false, 
        type: "GET", 
        url: "http://localhost/EParselService/EParcelServiceImpl.svc/Test", 
        contentType: "application/json", 
        dataType: "json", 
        success: function (data, textStatus){ 
           alert('successCallBack called'); 
           alert(data); 
           alert(textStatus); 
         }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
          alert('errorCallBack called'); 
          alert('textStatus = ' + textStatus + '/nerrorThrown = ' + errorThrown); 
         } 
       }); 
       alert('Done!'); 
      }); 
     }); 
</script> 

<input type="button" value="Get values from server" id="myButt" /> 
+0

これはおそらくクロスサイトの問題です。同じiisであなたのhtmlをホストしていますか?こちらをご覧ください:http://jasonkelly.net/2009/05/using-jquery-jsonp-for-cross-domain-ajax-with-wcf-services/ – albertjan

+0

私はIIS上でサービスをホストしましたが、テスト用のWebサイトはVisual Studio Development Server上で実行しています。 – ukraine

+0

それで、あなたは同じサイトの両方でそれらをホストすべきです。 XMLHttpRequestを使用したい場合は、XMLHttpRequestを有効範囲外に開くことが許可されていないためです。これは、XSS攻撃を防ぐためです。別のサイトからの依頼を使用したい場合は、jsonpのようなものを使用しなければなりません(前に投稿したように参照してください)。 – albertjan

答えて

1

だから、同一生成元の問題です。 (hereを参照)

XMLHttpRequestの場合、リソースは要求するページとまったく同じドメインになければなりません。これは、XSS(here参照)の攻撃を防ぐためです。別のドメインのリソースを使用する場合は、jsonpのようなものを使用する必要があります。 (hereを参照)良いチュートリアルでは、WCFでこれを行う方法。

+0

あなたが提供したリンクはもうアクティブではありません。 – PsychoDUCK

+0

@PsychoDUCKリンクを修正しました。私が口頭で提供したブログ記事はもはや入手できませんでした。しかし、私は基本的に同じ情報を提供する別のものを見つけました – albertjan

関連する問題