WCF 将对象返回给客户端

2024-01-22

我正在尝试使用 WCF,但我认为我遇到了障碍。我的问题是我可以打电话Add(double,double) and getPerson()来自“客户”。但是,我无法调用任何方法Person目的。我用简单的方法剥离了类。这是我的代码片段,请让我知道我做错了什么。

Server Code

  namespace Test.WebSvc{
  [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Sample")]
  public interface ICalculator
  {
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    Person getPerson();
  }


 public class CalculatorService : ICalculator
 {
    public double Add(double n1, double n2) { return n1+n2 ; }
    public Person getPerson(){ 
    Person tempPerson = new Person();
    return tempPerson; 
    }
 }

 [DataContract]
 public class Person{
 [OperationContractAttribute]
 public string toString(){
 return "This is a Person Object";
 }

Client Code

ServiceRef1.CalculatorClient client = ServiceRef1.CalculatorClient();//works
Console.WriteLine(client.Add(1.0,2.0)); //this too works   
ServiceRef1.Person p = client.getPerson(); // this is OK., but is not doing what I wanted it to do
Console.WriteLine(p.toString()); // I do not get "This is Person Object"

我猜测我的 Person 类的声明有问题..但不知道我应该做什么或我缺少什么..

Thanks!


是的,您遇到了障碍 - WCF 是一个基于消息的系统,它只进行交换序列化数据,无论是 XML 还是 JSON,文本或二进制格式。确实如此not然而,传递“完整”.NET 对象及其完整功能,如方法和所有这些(应该如何?它被设计为可互操作,并且我不知道 Ruby 或 PHP 客户端如何调用 .NET 对象上的方法)。

WCF 的设计初衷并不是为了远程访问对象,它只是在客户端和服务器之间传递消息。因此,您可以在 XML 模式中表达的任何内容(原子类型、继承和组合之类的任何内容)都可以序列化并在两方之间发送。

任何东西cannot在 XML 模式中建模 - 如泛型、接口、方法/代码 - 不能在客户端和服务器之间传递。

如果您控制通信的两端并且两者都基于 .NET,则有多种方法和技巧可以解决此问题。基本上,您必须将服务契约和所有数据契约(所有类)放入单独的程序集中,然后从服务器(实现服务契约)和调用契约的客户端引用该程序集。您可以告诉 WCF 重用引用程序集中已存在的类型,在这种情况下,客户端将重用现成的类型Person从公共共享程序集中创建类(及其所有 .NET 优点),而不是重新创建客户端数据代理。通过这个技巧,您可以让 WCF 通过网络发送序列化消息,而在客户端,您将重新创建一个成熟的 .NET 对象及其所有方法。

再次强调:只要您控制通信的两端,并且两端都使用 .NET,这种方法就非常有效。通过这种方法,任何互操作性都被排除在外。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF 将对象返回给客户端 的相关文章

随机推荐

  • Java:为什么常量池只为字符串值维护?

    我的问题是关于java实习和常量池 Java维护一个常量池java lang String 巧妙地使用 JVM 内存 并且这样做 java lang String 是不可变的 那么为什么java不维护其他不可变类型的常量池 比如Long I
  • moment 与 date-fns 区域设置日期格式

    我正在我们的应用程序的上下文中评估 DateFns 和 Moment 并发现 DateFns 中似乎有一个重要的遗漏 在 Moment 中 区域设置支持允许您格式化日期或时间的区域设置正确的表示形式 例如 日期格式 LL 和 L 将为英语区
  • 如何明智地处理版本控制和核心数据模型?

    当我们使用 git 将 Core Data 模型文件置于版本控制之下时 我们总是会遇到合并更改的可怕时间 我们发现避免手动合并更改的唯一可靠方法是在团队之间进行沟通以阻止访问当一个人做出必要的改变并推动时 然后是下一个人 依此类推 当然有更
  • Django 管理 - 排序 list_filter

    我在 list filter 中有 版本 我希望最新版本位于 全部 列表项之后 在这种情况下 如何对列表进行降序排序 全部 3 6 99 108 3 6 99 107 定义模型中的默认顺序Meta class class MyModel m
  • 很少有刚体导致子弹物理缓慢

    我目前正在将物理引擎 BulletPhysics 集成到我的图形引擎中 在此之前 我使用 SAP 和 Narrowphase 算法实现了简单的碰撞系统 SAP 和 Narrowphase 的时间成本为 3ms 大约有 300 个对象 由于我
  • 相同的 typeid 名称但不是 std::is_same

    使用 C gcc 4 8 3 我有 2 种类型 T1 and T2 具有奇怪的性质typeid T1 name and typeid T2 name 是相同的但是std is same
  • 在Jmeter中提取数组中的json

    如何提取json对象name从下面json data in Jmeter name x age 50 gender Female 我正在做这个 name在 JsonPath Extractor 中 它在我提取到的变量中给出了这个 name
  • 通过模板渲染时材质列表项看起来不同

    我有一个角度材质列表 我想根据外部提供的模板来渲染项目 然而 这似乎影响了mat list item组件呈现内容 特别是matLine孩子们 按如下方式显式定义项目渲染可以按预期工作
  • TCP 与 UDP - 什么是 TCP 连接? [复制]

    这个问题在这里已经有答案了 TCP 连接到底是什么 据我所知 从客户端到服务器没有物理连接 此连接是否只是客户端的套接字与服务器在三次握手后创建的新套接字链接 此后 一旦建立了 连接 连接两端的套接字就知道将其数据包发送到哪里 除了与 TC
  • 声明一个未知大小的数组

    这不是特定于任何编程语言的 问题是 在 n 个数字的数组中查找指定值的索引 现在我的问题是 在下面的代码中你能声明一个数组吗 int n read n int array n 或者这是允许的 int n array n read n 我认为
  • android api 29 上的 adb remount 是否损坏?

    adb remount从模拟器运行时 无法在 api 29 上正常工作 该命令在已尝试过的所有其他模拟器 18 23 25 26 27 和 28 上运行良好 有什么想法可能是为什么吗 Skip mounting partition prod
  • 空数组作为 PostgreSQL 数组列默认值

    我在 postgresql 9 4 数据库中定义了一个数组字段 character varying 64 我可以有一个空数组吗 作为该字段的默认值 设置的语法是什么 如果仅设置括号 则会出现以下错误 SQL error ERROR synt
  • 尽管有两组使用 ggplot2,但具有单回归线的散点图

    我想用 ggplot2 生成一个散点图 其中包含穿过所有数据点 无论它们来自哪个组 的回归线 但同时通过分组变量改变标记的形状 下面的代码生成组标记 但出现两条回归线 每组一条 model lm df ParamY ParamX p1 lt
  • getSupportActionBar() 使用 Robolectric 返回 null

    当我通过基于 Roboelectric 和 JUnit 的测试用例调用 getSupportActionBar 方法时 该方法返回 null 这是我的简单测试用例 package com mobile test import static
  • Wildfly 上的 Db2 驱动程序/数据源设置:无法加载驱动程序 [com.ibm] 的模块

    我想在我的 Wildfly 服务器 Wildfly 8 0 0 Final 和 8 1 0 上配置 db2 的数据源 但这样做遇到了一些问题 我的研究告诉我这是一个两步过程 将驱动程序作为模块安装在 JBOSS HOME modules c
  • constexpr 与未触及的非 constexpr 参数:谁是正确的,clang 还是 gcc?

    我有 4 个测试用例 我相信它们都是有效的 constexpr int f int const unused return 1 void g int const p constexpr int a f p clang error gcc v
  • 使用 Type 对象创建泛型

    我正在尝试使用 Type 对象创建泛型类的实例 基本上 我将在运行时拥有不同类型的对象的集合 并且由于无法确定它们到底是什么类型 所以我认为我必须使用反射 我正在做类似的事情 Type elType Type GetType obj Typ
  • 让 IntelliJ 了解属性文件

    有没有办法告诉 IntelliJ 某个特定的 properties文件将被加载到项目的环境中 我们用 PropertySource注释来加载属性文件 并在多个位置从由已配置的属性确定的文件加载覆盖值 如下所示 Configuration P
  • 如何在 WooCommerce 产品描述中显示所有图像

    我想用单个产品页面中的描述 所有产品图片 包括变体产品图片 替换我的产品描述 我可以使用 Magento 做到这一点 但现在当更改为 Woocommerce 时我不能 经过研究 我尝试使用过滤钩 但没有成功 我可以在产品描述中添加文本 但我
  • WCF 将对象返回给客户端

    我正在尝试使用 WCF 但我认为我遇到了障碍 我的问题是我可以打电话Add double double and getPerson 来自 客户 但是 我无法调用任何方法Person目的 我用简单的方法剥离了类 这是我的代码片段 请让我知道我