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