使用 jQuery 使用 WCF 服务
Consume WCF service using jQuery
我一直在尝试从 WCF 服务获取数据,但没有成功,非常感谢你的帮助,这是我的代码,我总是在 ajax 呼叫:
Service1.svc.cs
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public string GetData()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string output = "It worked";
return serializer.Serialize(output);
}
}
IService1.cs
[OperationContract]
[System.ServiceModel.Web.WebInvoke(Method = "POST",
ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json)]
string GetData();
Web.config
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="ServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service behaviorConfiguration="ServiceBehavior" name="MyService.Service1">
<endpoint address="" binding="webHttpBinding" contract="MyService.IService1" behaviorConfiguration="ServiceAspNetAjaxBehavior">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
jQuery 来电
<script type="text/javascript">
$(document).ready(function () {
CallMyService();
});
function CallMyService() {
$.ajax({
type: "POST",
url: "http://localhost:54368/Service1.svc/GetData",
data: '',
dataType: "json",
contentType: "application/json",
success: ServiceSucceeded,
error: ServiceFailed
});
}
function ServiceFailed(result) {
alert(result.status + ' ' + result.statusText);
}
function ServiceSucceeded(result) {
var resultObject = result.GetDataResult;
alert(resultObject);
}
</script>
如果我尝试通过添加服务引用来使用 C# 项目中的 WCF 服务,我将得到:
在 ServiceModel 客户端配置部分找不到引用合同 'myReference.IService1' 的默认端点元素。这可能是因为没有找到您的应用程序的配置文件,或者因为在客户端元素中找不到与此协定匹配的端点元素。
会不会和错误有关? WCF 服务托管在本地 IIS 中。
我只是不知道还要检查什么。
更新:
我刚刚找到了解决方案,原来我需要一个Global.asax文件在WCF服务解决方案中,代码如下:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
其中localhost就是你的WCF服务所在的地方,之后就可以了!非常感谢你们告诉我 Javascript 的调试器,这给了我线索!!!
更新:
我刚刚找到了解决方案,原来我需要在 WCF 服务解决方案中使用以下代码创建一个 Global.asax 文件:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
其中localhost就是你的WCF服务所在的地方,之后就可以了!非常感谢你们告诉我 Javascript 的调试器,这给了我线索!!!
我一直在尝试从 WCF 服务获取数据,但没有成功,非常感谢你的帮助,这是我的代码,我总是在 ajax 呼叫:
Service1.svc.cs
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public string GetData()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string output = "It worked";
return serializer.Serialize(output);
}
}
IService1.cs
[OperationContract]
[System.ServiceModel.Web.WebInvoke(Method = "POST",
ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json)]
string GetData();
Web.config
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="ServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service behaviorConfiguration="ServiceBehavior" name="MyService.Service1">
<endpoint address="" binding="webHttpBinding" contract="MyService.IService1" behaviorConfiguration="ServiceAspNetAjaxBehavior">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
jQuery 来电
<script type="text/javascript">
$(document).ready(function () {
CallMyService();
});
function CallMyService() {
$.ajax({
type: "POST",
url: "http://localhost:54368/Service1.svc/GetData",
data: '',
dataType: "json",
contentType: "application/json",
success: ServiceSucceeded,
error: ServiceFailed
});
}
function ServiceFailed(result) {
alert(result.status + ' ' + result.statusText);
}
function ServiceSucceeded(result) {
var resultObject = result.GetDataResult;
alert(resultObject);
}
</script>
如果我尝试通过添加服务引用来使用 C# 项目中的 WCF 服务,我将得到:
在 ServiceModel 客户端配置部分找不到引用合同 'myReference.IService1' 的默认端点元素。这可能是因为没有找到您的应用程序的配置文件,或者因为在客户端元素中找不到与此协定匹配的端点元素。
会不会和错误有关? WCF 服务托管在本地 IIS 中。
我只是不知道还要检查什么。
更新:
我刚刚找到了解决方案,原来我需要一个Global.asax文件在WCF服务解决方案中,代码如下:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
其中localhost就是你的WCF服务所在的地方,之后就可以了!非常感谢你们告诉我 Javascript 的调试器,这给了我线索!!!
更新:
我刚刚找到了解决方案,原来我需要在 WCF 服务解决方案中使用以下代码创建一个 Global.asax 文件:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
其中localhost就是你的WCF服务所在的地方,之后就可以了!非常感谢你们告诉我 Javascript 的调试器,这给了我线索!!!