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防火墙服务以消除它是防火墙问题,同样的问题仍然存在。
我迷失了我还能尝试什么?
答案 0 :(得分:1)
可悲的是,“NotFound”并不意味着实际上找不到该服务。这是IIS告诉你“失败的东西”的方式。
最有可能的是,失败的原因是您的服务或服务接口上没有KnownType或ServiceKnownType属性,尽管您需要一个。
WCF的串行器并非无所不知。它会查看您的函数签名并完全序列化。你的签名说你返回一个物体。返回除null
或new 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