方案。我向我的ASP.NET应用程序(webforms)添加了一个“支持AJAX的WCF服务”。这导致以下(长命名空间被截断):
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService
{
// To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
// To create an operation that returns XML,
// add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
// and include the following line in the operation body:
// WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
[OperationContract]
public void DoWork()
{
// Add your operation implementation here
return;
}
// Add more operations here and mark them with [OperationContract]
}
我改变了 [ServiceContract(Namespace =“”)] 至 [ServiceContract(Namespace =“http://domain.com/services”)]
在我的页面中添加:
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
<Services>
<asp:ServiceReference path="~/Services/MyService.svc" />
</Services>
</asp:ScriptManagerProxy>
我还添加了一个javascript函数,因此我可以调用该服务:
function callDoWork(){ domain.com.services.MyService.DoWork(); }
该网站使用Windows身份验证运行。当我运行页面时,生成,找到jsdebug文件和domain.com.services.MyService.DoWork();工作没有问题。这已通过FireBug确认。所以我的下一步是创建一个接口并让服务类实现它。所以现在我有:
[ServiceContract(Namespace = "http://domain.com/services")]
public interface IMyService
{
[OperationContract]
void DoWork();
}
和
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 公共类MyService:IMyService { public void DoWork() { //在此处添加您的操作实现 返回; } }
并将web.config更改为contract =“Namespace.IMyService”
现在,我在jsdebug文件上收到401错误。有人见过这个吗?
感谢您的帮助。
答案 0 :(得分:0)
这是一只红鲱鱼。无论出于何种原因,在服务上也有一个mex端点导致这种情况发生。我取消了mex端点,然后401消失了。并不是说这是一个解决方案,但至少我已经过了我的错误。