asp.net - Asp.Net 4 Web 表单中 Ajax Url 到路由 WCF

标签 asp.net ajax wcf asp.net-routing

我在 Asp.Net 4 Web 应用程序中实现了路由。 使用 aspx 文件可以正常工作,但不能使用 WCF。

我有 WCF,它是通过 ajax 请求从 javascipt 文件调用的。

我的WCF代码是:

[ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Signature
    {

        /// <summary>
        /// Get signature info by email address.
        /// </summary>        
        [OperationContract]        
        [WebInvoke(ResponseFormat = WebMessageFormat.Json)]
        public string GetSignatureInfo(string email)
        {
            ...
        }
    }
}
<小时/>

Web.config:

<services>     
  <service name="WEB.Services.Signature">
    <endpoint address="" behaviorConfiguration="WEB.Services.SignatureAspNetAjaxBehavior"
      binding="webHttpBinding" contract="WEB.Services.Signature" />
  </service>
</services>
<小时/>

JavaScript:

var _data = {
    "email": self.email.val()
};

$.ajax({
    url: '../Signature'
    , type: 'POST'
    , dataType: 'json'
    , data: JSON.stringify(_data)
    , success: function (data) {
        console.log('success');
    }
    , error: function () {
        console.log('error');
    }
});
<小时/>

全局.asax:

void RegisterRoutes(RouteCollection routes)
{
    var sr = new ServiceRoute("Signature", new WebServiceHostFactory(), typeof(Signature));
    sr.Url = "Services/Signature.svc/GetSignatureInfo";
    routes.Add(sr);
}


void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup

    RegisterRoutes(RouteTable.Routes);            
}

我收到“网络错误:404 未找到 - _http://www.my-project.com/Signature”。我哪里错了或者ajax url应该是什么?!!!请帮忙。 提前致谢。

最佳答案

我的同事找到了解决方案: 问题出在 IIS 配置中 - 如果我的应用程序位于 Default Site 下,我应该添加带有项目前缀的 ajax url。例如,如果我的服务位于Web项目中,我应该在js文件中输入如下url:'/Web/Services/MyService/MyFunction'。相同的 url 应该位于 Global.asax 文件中的 ServiceRoute url 中,但没有第一个“/”。 这样的话,在本地可以正常工作,但是放到生产服务器上就会出现问题。

最优解: 1. IIS:添加网站,为其配置物理路径,更改其端口(!!!)。 2. .js + Global.asax :只需从两个地方的 url 中删除项目名称即可。因此,url 将类似于:在 js 文件“/Services/MyService/MyFunction”和 Global.asax 中“Services/MyService/MyFunction”(没有第一个“/”)

仅此而已。非常感谢 Miri(同事)。

关于asp.net - Asp.Net 4 Web 表单中 Ajax Url 到路由 WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18556708/

相关文章:

javascript - 在 Javascript/Jquery Ajax 调用中使用 WCF 服务

asp.net - 如何在asp.net中访问Outlook的调度程序

javascript - 使用 AJAX 进行多项选择并且没有提交按钮

php - PHP 分页类和 AJAX/JQuery 的链接错误

java - Spring MVC - 将 JSON 对象从 Ajax post 请求映射到 Java 对象

c# - 安装 .NET Framework 4.5 后 HttpContext.Current.User 为空

c# - Mono 下的 WCF over TLS

asp.net - VS2012 - 服务器/数据库资源管理器中未显示 "Create table"或 "show table data"菜单选项

asp.net - 多个站点的正确缓存架构

asp.net - 如何在 Visual Studio 2015 ASP.NET MVC 项目中添加 Apache Cordova