如何使用WebServices返回自定义对象

Gav*_*hin 4 c# .net-1.1 web-services

[问题]
创建了要部署在服务器计算机和客户端计算机上的共享库,如何在客户端服务器与库提供的类之间进行通信?

通过webservices传输信息似乎不起作用,因为Web服务返回的序列化对象是一个不转换为共享库的Web服务类.

我是否错误地使用了网络服务?有没有更好的办法?

[例]

MyLibrary.cs和SubLibrary.cs位于客户端应用程序使用的共享程序集中.

MyLibrary.cs

public class MyLibrary
{
    private SubLibrary sublib = new SubLibrary();

    public class MyLibrary()
    {
    }

    public string GetValue()
    {
        return sublib.GetValue();
    }
}
Run Code Online (Sandbox Code Playgroud)

SubLibrary.cs

public class SubLibrary
{
    private string str = "Hello World";

    public SubLibrary()
    {
    }

    public string GetValue()
    {
        return str;
    }
}
Run Code Online (Sandbox Code Playgroud)

WebService.asmx.cs

[WebMethod]
public MyLibrary GetInfo()
{
    return new MyLibrary();
}
Run Code Online (Sandbox Code Playgroud)

客户端应用

private void GetInfo_Click(object sender, System.EventArgs e)
{
  WS.WebService services = new WS.WebService();

  MyLibrary info = services.GetInfo();  // This of course doesn't convert.

  MessageBox.Show(info.GetValue());
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

简而言之,这是1.1的痛苦(部分也是2.0).程序集共享(或类型共享)才真正开始成为WCF(.NET 3.0)中的一项功能.1.1中生成的代理永远不会与"实际"类直接兼容; 您可以在多个服务("sharetypes"?)之间共享相同的代理,但不能与独立的源文件IIRC共享.

因为它是C#1.2,你既没有部分类也没有扩展方法来欺骗它们.

选项(我可以看到):

  • 编写静态实用程序方法,在两个对象模型之间进行费力的转换
  • 同上但使用XmlSerializer(更少的代码,但不是那么快)
  • 和它一起生活
  • 升级到WCF(非常重大的变化)