WCF、EF 和 UWP

Posted

技术标签:

【中文标题】WCF、EF 和 UWP【英文标题】:WCF, EF and UWP 【发布时间】:2017-05-28 17:42:51 【问题描述】:

我目前正在编写 UWP 应用程序。我正在使用 WCF 服务与包含 EF 的业务层对话以与 SQL Server 数据库对话。这一切都处于非常早期的阶段,因为我以前从未使用过 UWP。

我让 UWP 使用 WCF 从数据库返回数据。当我返回一个字符串时,这工作正常。但是,现在我想返回对象,这在 UWP 只接收引用的意义上不再起作用。不返回任何对象。当我在调试模式下运行 WCF 时,返回对象,我可以看到所有包含数据的字段等。

你们中的一个天才可以帮助我吗,因为我被困住了,不知道该怎么办。

这是我的代码。我在业务层的课

namespace Business.Models

  [DataContract(IsReference = true)]
  public class SystemUser
  
    public tblSystemUser User  get; set; 

    // public tblRole Role  get; set; 

  

WCF 代码:

namespace ActiveCareWCF

  [ServiceContract]
  public interface IUser
  

    [OperationContract]
    Task<SystemUser> DoLogin(string userName);
  


 public class Service : IUser
 
    public async Task<SystemUser> DoLogin(string userName)
    
        SystemUser systemUser = new SystemUser();
        userName = @"username";

        try
        
            ServiceCalls serviceCalls = new ServiceCalls();

            systemUser = serviceCalls.AuthorizeUser(userName);

            return systemUser --- **this is returning an object**;
        
        catch (Exception ex)
        

            throw ex;
        

    


SVC 文件:

 public class ActiveCareService : IUser

    public async Task<SystemUser> DoLogin(string userName)
    
        Service service = new Service();

        var user = service.DoLogin(userName);

        return user.Result;
    


最后是 UWP 中的调用。

 private async void Login_Click(object sender, RoutedEventArgs e)
    
        ActiveCareService.UserClient client = new ActiveCareService.UserClient();

        var userFromService = client.DoLoginAsync(@"username").Result;
        await client.CloseAsync();

        var dialog = new MessageDialog("Logged in as " + userFromService.FirstName); **This just returns a string of the type of object it is, not the actual object. This is what I'm struggling with.**
        await dialog.ShowAsync();

        Frame.Navigate(typeof(YourSites));
    

提前致谢。

【问题讨论】:

在 UWP 应用中更新服务客户端? 嗨,戴夫,我已更新、删除并重新添加。 UWP 中返回的所有调用都是 ActiveCareApp.ActiveCareService.SystemUser。 这里有很多问题。 1)你真的需要WCF吗?不是直接错误,而是有点沉重和过时。替代方案是 a.o、WebAPI 和 ServiceStack。 3) 你的async void Login_Click() 不应该使用.Result。请改用await 这是 UWP 问题还是服务配置问题?如果您直接调用端点,我会通过查看原始 HTTP 中的内容来判断。 【参考方案1】:

我也在做同样的事情,现在我的服务总是返回 JSON 字符串,这意味着必须在服务中序列化并在 uwp 处反序列化。

您必须在服务和 UWP 中都有序列化类的模型。效果很好。

在我的服务中,我有一个完整的模型,在 UWP 应用程序中,我创建了一个符合我需要的简化模型。

希望这能有所帮助。

【讨论】:

以上是关于WCF、EF 和 UWP的主要内容,如果未能解决你的问题,请参考以下文章

WCF 数据服务和 EF4 CTP5,如何为查询配置默认的急切加载模式?

如何通过WCF SOAP服务访问EF导航属性?

EF4 POCO:快照与 WCF 上的自我跟踪

分享基于EF+WCF的通用三层架构及解析

WCF 数据服务使用基于 EF 的存储库中的数据

WCF / EF / SQL Server / VS2017 / C#:多层应用程序在部署到本地 IIS 10.0 作为托管服务器时出错