更改WCF服务以使用接口时jsdebug文件上的401错误

时间:2011-03-24 18:31:07

标签: wcf windows-authentication webforms

方案。我向我的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错误。有人见过这个吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这是一只红鲱鱼。无论出于何种原因,在服务上也有一个mex端点导致这种情况发生。我取消了mex端点,然后401消失了。并不是说这是一个解决方案,但至少我已经过了我的错误。