远程服务器返回错误:NotFound WCF服务

时间:2013-08-05 18:00:06

标签: c# wcf windows-phone-8

Windows Phone 8,Windows 8 +更新64位,VS 2012.运行VS2012作为管理员

我已经创建了一个WCF服务。服务代码:

    [OperationContract]
    Object GetCustomersObject();

实施代码

    public Object GetCustomersObject()
    {
        object c = DataContext.Customers;
        return c;
    }

然后我添加一个新网站到我的应用程序并配置Service.svc文件以指向合同等。在Web浏览器中运行它并可以看到WSDL。

然后我使用WCFTestClient实用程序对其进行测试,但我可以连接到上面的所有方法,因为它不支持Object。

我现在创建一个Win Phone 8项目并连接到服务i然后得到错误“System.ServiceModel.ni.dll中发生类型'System.ServiceModel.CommunicationException'的异常但是没有处理用户代码“

扩展异常我注意到消息是远程服务器返回错误:NotFound。。然后我按照http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj684580(v=vs.105).aspx上的步骤进行操作,因为我在VS下运行IIS我不遵循任何其他说明(即我按照建议添加一个条目并打开防火墙端口,删除现有服务并读取关闭IIS服务后它。)

我仍然得到同样的错误。所以我删除了该服务,并使用IP,机器名称重新添加它,无论使用哪个仍然给出相同的错误。

我还试图关闭Windows防火墙服务以消除它是防火墙问题,同样的问题仍然存在。

我迷失了我还能尝试什么?

2 个答案:

答案 0 :(得分:1)

可悲的是,“NotFound”并不意味着实际上找不到该服务。这是IIS告诉你“失败的东西”的方式。

最有可能的是,失败的原因是您的服务或服务接口上没有KnownType或ServiceKnownType属性,尽管您需要一个。

WCF的串行器并非无所不知。它会查看您的函数签名并完全序列化。你的签名说你返回一个物体。返回除nullnew object()之外的任何内容都会激活序列化程序并使您的服务调用失败。如果要序列化非基本框架类型并且从方法签名中看不到的内容,则需要在服务类上添加具有该类型的KnownType属性或在接口上放置ServiceKnownType属性以允许DataContractSerializer知道即将发生的事情。

示例:

[ServiceContract]
[ServiceKnownType(typeof(YourCustomer))]
public interface IYourService
{
    [OperationContract]
    Object GetCustomersObject();
}

答案 1 :(得分:1)

您通常会看到CommunicationException,因为该应用无法在localhost找到Web服务。

这是可行的解决方案

https://msdn.microsoft.com/library/windows/apps/jj684580%28v=vs.105%29.aspx