gpt4 book ai didi

c# - 在 Html 页面中使用 Javascript 调用 Wcf 服务

转载 作者:太空狗 更新时间:2023-10-29 14:47:17 25 4
gpt4 key购买 nike

我在 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);
}
});

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>

在我的 IService1.cs 中

    [OperationContract]
[WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Json)]
string GetTEST();

这是警告显示

enter image description here

错误:

enter image description here

localhost:52768/Service1.svc显示

enter image description here

最佳答案

基于这个 article ,问题是 AJAX 有 cross-site limitation 阻止你调用远程服务。对于这种情况,一个简单的解决方法是在使用服务器端代码调用远程 WCF 服务的同一应用程序中定义服务器端 page_method(脚本回调)或本地 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";
}
}

您托管控制台应用程序:

// 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>

验证服务是否正常工作:

  1. 从 Visual Studio 2012 中运行 ConsoleAJAXWCF 控制台应用程序。在 Windows Vista 和更高版本的操作系统上运行时,该服务必须以管理员权限运行。因为 Visual Studio 是以管理员权限运行的,所以 GettingStartedHost 也是以管理员权限运行的。您还可以启动一个新的命令提示符,以管理员权限运行它,并在其中运行 service.exe。
  2. 打开 Internet Explorer 并浏览到位于 localhost:52768/Service1/的服务调试页面

调用服务的 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>

关于c# - 在 Html 页面中使用 Javascript 调用 Wcf 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21970848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com