2013-06-19 45 views
1

我想從其他項目中使用本地地址調用WCF服務。我有兩個項目在同一解決方案資源管理器一個項目具有服務,另一個項目是一個Web應用程序,我在JavaScript中使用Ajax來調用WCF服務。 以下是我的javascript代碼,來自ajax的WCF服務調用(跨域)

function sclick() { 
    alert("m here"); 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost:4780/Service1.svc/myfunction", 
     contentType: "application/json; charset=utf-8 ", 
     dataType: "json", 
     success: success, 
     error: fail 
    }) 

} 

function success(result) { 
    alert(result); 
    //alert("Success" + result.myfunctionResult); 
} 

function fail(result) { 
    alert("Fail..... " + result.statusText + ": " + result.status); 
} 

流轉到成功的功能,但我得到的結果對象爲空。 ajax部分中的URL是我通過在瀏覽器中查看service1.svc文件獲得的URL。 任何人都可以告訴我我哪裏錯了! 它在同一個項目中工作正常。但跨域不起作用。當我從其他項目調用服務時,它返回null。我在服務中給了斷點。斷點顯示適​​當的值,但它不會出現在我的JavaScript代碼中。

+1

你有沒有配置WCF服務也接受跨域請求? – timothyclifford

+0

我認爲是這樣..在應用程序。配置文件我已經給下面的標籤 <的WebHttpBinding> <綁定名稱= 「跨域」 crossDomainScriptAccessEnabled = 「真」/> 對嗎?還是我需要做別的事情? –

+0

您的服務是否配置爲支持REST API? –

回答

0

您不應該通過調用Web服務調用來與開箱即用的WCF服務通話,但這可能會更復雜。請參閱:http://social.msdn.microsoft.com/Forums/vstudio/en-US/c896b564-7a9b-423d-a42d-d36c33c46e7d/consume-a-wcf-service-as-a-url

這是因爲WCF具有框架使用的「開銷」數據。另外,WCF配置可能會有所不同:它可能是REST,SOAP或者甚至是Tcp或命名管道。

一個更簡單的方法將產生WCF客戶端: http://msdn.microsoft.com/en-us/library/ms733133.aspx

,比 呼叫從AJAX客戶端代理,而不是試圖直接調用服務器。

這是假設您正在運行.Net Web應用程序。否則,請參閱如何直接與服務對話。在這裏,這對如何做到這一點與Java的例子: http://hoonzis.blogspot.co.il/2011/07/consuming-wcf-services-with-java-client.html

最後,另一個很好的答案,在這裏提出,後來被刪除,是cofigure WCF服務支持REST API,就像這樣: http://www.codeproject.com/Articles/128478/Consuming-WCF-REST-Services-Using-jQuery-AJAX-Call

0

不知道WCF的Web服務,但可能這行代碼是定期的服務,解決您的問題

  var jsonData = [YOUR JSON PARAMETER]; 

      $.ajax({ 
       async: false, 
       type: "POST", 
       url: [YOUR WEB SERVICE URL], 
       contentType: "application/json; charset=utf-8",     
       data: JSON.stringify({ json: jsonData }), 
       dataType: "json",     
       success: OnSuccess, 
       failure: function(err) { 
        alert("Error : " + err.d); 
       } 
      }); 

      function OnSuccess(data) { 
       alert("Success:" + data.d);      
      } 

你可以做一件事對於只需要設置接入控制 - Allow-Origin &訪問控制 - 允許在CustomeHeaders您的Web服務web.config文件中的頭。

<add name="Access-Control-Allow-Origin" value="*" /> 
<add name="Access-Control-Allow-Headers" value="Content-Type" /> 

如果你想只允許特定的域,你可以做到這一點與域,而不是*值的具體數值