Jay*_*yce 6 html javascript c# wcf jquery
我在VSStudio2012中有一个WCF项目,我想从JavaScript函数调用一个方法.
JavaScript文件:
var url = 'http://localhost:52768/Service1.svc/'
function test() {
var response;
$.ajax({
type: 'Post',
url: url + 'GetTEST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
alert(msg);
},
error: function (e) {
alert("Error : " + e.statusText);
}
});
Run Code Online (Sandbox Code Playgroud)
}
HTML文件:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script Language="JavaScript" src="Scripts/JavaScript1.js"></script>
<script Language="JavaScript" src="Scripts/jquery-1.10.2.min.js"></script>
<script Language="JavaScript" src="Scripts/jquery-1.9.1.intellisense.js"></script>
<script Language="JavaScript" src="Scripts/jquery-1.9.1.js"></script>
<script Language="JavaScript" src="Scripts/jquery-1.9.1.min.js"></script>
<script Language="JavaScript" src="Scripts/jquery.unobtrusive-ajax.js"></script>
<script Language="JavaScript" src="Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script Language="JavaScript" src="Scripts/jquery.validate.js"></script>
<script Language="JavaScript" src="Scripts/jquery.validate.min.js"></script>
<title>TESTE</title>
</head>
<body>
<input id="Button1" type="button" value="button" onclick="test()"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在我的IService1.cs中
[OperationContract]
[WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Json)]
string GetTEST();
Run Code Online (Sandbox Code Playgroud)
这是警报显示

而错误:

localhost:52768/Service1.svc显示

chr*_*dam 12
基于这篇文章,问题是AJAX具有跨站点限制,阻止您调用远程服务.对于这种情况,一个简单的解决方法是在同一应用程序中定义服务器端page_method(脚本回调)或本地wcf服务,该服务使用服务器端代码来调用远程WCF服务.并且您的网页使用AJAX来调用本地WCF服务(其作用类似于中介).
另一种方法是将远程WCF服务定义为接受http GET请求的标准REST服务.因此,您的网页可以使用JQuery api通过JQuery脚本访问远程WCF服务操作.然后,您将WCF服务作为控制台应用程序托管,并在另一个Web应用程序中使用JQuery来调用它:
[ServiceContract(Namespace="ConsoleAJAXWCF")]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)]
string GetTEST();
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public string GetTEST()
{
return "OKKKKKKKK";
}
}
Run Code Online (Sandbox Code Playgroud)
您托管控制台应用程序
// program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;
using ConsoleAJAXWCF;
namespace ConsoleAJAXWCF
{
class Program
{
static void Main(string[] args)
{
// Step 1 Add a service endpoint.
using (WebServiceHost selfHost = new WebServiceHost(typeof(Service1)))
{
try
{
// Step 2 Start the service.
selfHost.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
selfHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine("An exception occurred: {0}", ce.Message);
selfHost.Abort();
}
}
}
}
}
// WCF Configuration
<endpointBehaviors>
<behavior name="AJAXEndpoint" >
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="ConsoleAJAXWCF.Service1">
<endpoint
behaviorConfiguration="AJAXEndpoint"
address="" binding="webHttpBinding" contract="ConsoleAJAXWCF.IService1">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:52768/Service1/"/>
</baseAddresses>
</host>
</service>
</services>
Run Code Online (Sandbox Code Playgroud)
验证服务是否正常工作:
调用服务的ASPX页面中的代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script Language="JavaScript" src="Scripts/jquery-1.10.2.min.js"></script>
<script Language="JavaScript" src="Scripts/jquery-1.9.1.intellisense.js"></script>
<script Language="JavaScript" src="Scripts/jquery.unobtrusive-ajax.js"></script>
<script Language="JavaScript" src="Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script Language="JavaScript" src="Scripts/jquery.validate.js"></script>
<title>TESTE</title>
</head>
<body>
<input id="Button1" type="button" value="button" onclick="CallRESTWCFService()"/>
</body>
<script type="text/javascript">
function CallRESTWCFService() {
$.getJSON("http://localhost:52768/Service1/GetTEST", {},
function (data) {
alert(data);
});
}
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48172 次 |
| 最近记录: |