0

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 实用程序对其进行测试,但我可以连接到除上述方法之外的所有方法,因为它不支持对象。

我现在创建了一个 Win Phone 8 项目并连接到该服务,然后我收到错误“System.ServiceModel.ni.dll 中发生‘System.ServiceModel.CommunicationException’类型的异常,但未在用户代码中处理”

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

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

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

我不知道我还能尝试什么?

4

2 回答 2

1

可悲的是,“未找到”并不意味着实际上没有找到该服务。这是 IIS 告诉您“失败”的方式。

很可能发生故障是因为您的服务或服务接口上没有 KnownType 或 ServiceKnownType 属性,尽管您需要一个。

WCF 的序列化器并不是无所不知的。它会查看您的函数签名并对其进行序列化。你的签名说你返回一个对象。返回除nullor之外的任何内容new object()都会刺激序列化程序并使您的服务调用失败。如果你想序列化一些不是基本框架类型并且从方法签名中不可见的东西,你需要在你的服务类上放置一个具有该类型的 KnownType 属性,或者在你的接口上放置一个ServiceKnownType属性,让 DataContractSerializer 知道接下来会发生什么.

例子:

[ServiceContract]
[ServiceKnownType(typeof(YourCustomer))]
public interface IYourService
{
    [OperationContract]
    Object GetCustomersObject();
}
于 2013-08-05T19:09:39.610 回答
1

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

这是可能有效的解决方案

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

于 2015-06-03T12:02:00.703 回答