3

我在 Asp.Net 4 Web App 中实现了路由。使用 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)
        {
            ...
        }
    }
}

网络配置:

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

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

4

1 回答 1

3

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

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

就这样。非常感谢 Miri(同事)。

于 2013-09-03T08:18:09.280 回答