【问题标题】:MVC, WCF ASP.NET 4.0 & JQUERYMVC、WCF ASP.NET 4.0 和 JQUERY
【发布时间】:2010-10-07 15:38:40
【问题描述】:

过去几天我对 WCF 感到沮丧,所以我决定在这里发帖寻求帮助,因为.. 好吧.. 我不知道从哪里开始!.. 任何帮助都可以感激不尽!

首先:在 .Net 4.0 中创建 WCF 服务时,如果我希望能够创建一个使用 JQuery 接受来自 AJAX POST 数据的服务,我应该使用哪个模板? (如果可能,我希望能够拥有 Global.asax)。

其次:我的服务在 WCF 测试客户端中运行良好,但是当我设法让它接受 GET 请求时,测试客户端停止显示服务方法。 POST 方法似乎拒绝直接工作。

我想开发一个将在 IIS 服务器上运行的 WCF 服务,我可以通过 JQuery Ajax 调用从我的任何一个应用程序中挂接该服务。

如果有人有指导我正确方向的教程,我将不胜感激,因为我无法使用 .Net 4 在 WCF 上找到任何东西,这是可行的。

干杯

【问题讨论】:

  • 您有什么特别想使用 WCF 的理由吗?如果您的服务仅由 jQuery 请求使用,您可以在 MVC 应用程序中使用控制器。有很多关于如何在不与 WCF 混淆的情况下使用纯 MVC 进行这项工作的示例,但也许您还有其他要求迫使您使用 WCF (?)
  • 您好 Hector,我们确实希望托管一个服务,我们的许多不同的应用程序都可以通过不同的方式连接到该服务,而不仅仅是 JQuery。 JQuery 正是我试图开始工作的方法。

标签: jquery asp.net-mvc ajax wcf .net-4.0


【解决方案1】:

首先要考虑的是same origin policy 限制。如果您无法遵守它,并且您的 Web 服务与使用 AJAX 脚本的域不同,您可能会停止阅读我的答案并重新考虑您的架构。

如果您仍在阅读,您可以像往常一样从定义服务合同和实施开始:

[ServiceContract]
public interface IFoo
{
    [OperationContract]
    string GetData(int value);
}

public class FooService : IFoo
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
}

然后添加一个fooservice.svc 文件,它将在 IIS 中公开服务:

<%@ ServiceHost 
    Language="C#" 
    Debug="true" 
    Service="SomeNs.FooService" 
    CodeBehind="FooService.svc.cs" 
    Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
%>

最后一行 Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" 非常重要,因为这将允许您使用 JSON。

最后一部分是web.config:

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior>
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
         </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

最后是一个发送 AJAX 请求来使用服务的 HTML 页面:

<!DOCTYPE html>
<html>
<head>
    <title>WCF Test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript" src="http://www.json.org/json2.js"></script>
    <script type="text/javascript">
        $(function () {
            $.ajax({
                // Notice the URL here: Need to be hosted on the same domain
                url: '/fooservice.svc/getdata',
                type: 'post',
                contentType: 'application/json; charset=utf-8',
                data: JSON.stringify({ value: 7 }),
                success: function (result) {
                    alert(result.d);
                }
            });
        });
    </script>
</head>
<body>

</body>
</html>

【讨论】:

  • 干杯伙伴,我不知道同源政策。非常有用的信息!优秀的答案!非常感谢!
猜你喜欢
  • 2010-09-18
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多