2

我有 2 个项目 - 一个是 Web 服务,另一个是查询该 Web 服务的 Windows 移动应用程序。

例如,我有一个名为“动物”的课程。我想使用网络服务将 Animal 的实例返回到移动设备。问题是移动设备显然不支持完整的 .net 框架,并且 Animal 类有一些需要完整框架的特性。

我在这里最好的选择是什么?Animal 类实际上只包含只是文本的属性。我最好将数据解析为 XML 消息并将其发送回移动设备(因此实际上不使用移动设备上的 Animal 对象?)还是创建 2 个类,每个平台一个?

谢谢

4

2 回答 2

0

您可以在两个项目之间共享代码文件。右键单击您的项目,选择“添加”->“现有项目”,然后单击“添加”按钮旁边的向下箭头,您将在那里看到“添加为链接”选项,如果您知道您的类将为这两个项目编译,即使它们的目标是不同的平台,您可以使用它来共享两个项目的类

于 2012-07-13T04:25:09.140 回答
0

我使用相同的代码运行 Windows 和 Mobile。

移动设备PocketPC在项目的属性中定义了这个词,因此,您所要做的(因为您使用 C# 进行编码)是:

public static bool CreateDirectoryWithPermission(string path) {
  bool ok = false;
  DirectoryInfo dir = new DirectoryInfo(path);
#if !PocketPC
  try {
    DirectorySecurity ds;
    if (dir.Exists) {
      ds = dir.GetAccessControl();
    } else {
      ds = dir.Parent.GetAccessControl();
    }
    string user = Environment.UserDomainName + @"\" + Environment.UserName;
    FileSystemAccessRule rule = new FileSystemAccessRule(user, FileSystemRights.FullControl, AccessControlType.Allow);
    ds.AddAccessRule(rule);
    dir.Create(ds);
    ok = true;
  } catch (Exception) { }
#endif
  if (!ok) {
    try {
      dir.Create();
      ok = true;
    } catch (Exception) { }
  }
  return ok;
}

如果我没记错的话,System.Security.AccessControl在Windows Mobile下是没有定义的,所以DirectorySecurity是未定义的。

更新:

这是另一种实现您感兴趣的方法:在完全独立的命名空间中创建一个 Serializable 类,在两个项目中使用该命名空间,并将序列化数据从 Web 服务传递到移动设备。我也这样做,但是还有更多代码。

namespace LocksAnimal {

  [Serializable()]
  public class Animal {

    private string name;

    public Animal() {
      name = "Lock";
    }

    public string GetName() {
#ifdef PocketPC
      return name + " (Mobile Version)";
#else
      return name + " (Webservice Version)";
#endif
    }

  }

}

当然,Webservice 版本可以访问更详细的信息(如GetAccessControl()第一个代码段所示)。

我希望这能给你一些想法。

于 2012-07-13T16:31:29.780 回答