(已编辑) - >我有一个不同项目的解决方案。它有一个奇怪的结构,因为我不是一个专业的软件工程师。该解决方案包括三个部分:一个HMI项目(WPF),业务项目(类库类型)和服务项目(WCF)。
在商务项目中,我做了一些具有结果的过程,我将其保存在静态类中。这个结果在前面提到的WPF项目中显示在屏幕上,现在我需要通过放置在WCF项目中的一个服务来传输这些数据。
该对象类似于:
[DataContract]
public class ObjectToTransfer
{
[DataMember]
public string ParameterOne = string.Empty;
[DataMember]
public string ParameterTwo = string.Empty;
}
另一方面,从属于商业项目的静态类中获取信息的方法是这样的:
[ServiceBehavior]
public class Service: IService
{
public ObjectToTransfer SendObject()
{
return new ObjectToTransfer{
ParameterOne = BusinessProject.StaticClass.ResultOne,
ParameterTwo = BusinessProject.StaticClass.ResultTwo
};
}
好吧,当我使用服务时,结果是一个参数为1和2为空的对象。另外,当我调试两个项目运行的解决方案时,静态类在她的属性中没有信息......这就像两个项目是否独立运行,尽管两者都在相同的解决方案下...,这就像是否他们之间没有任何关系。错误在哪里?
提前谢谢!
答案 0 :(得分:0)
您需要做的主要事情是将DataContract
类更改为具有适当getter和setter的类。
[DataContract]
public class ObjectToTransfer
{
[DataMember]
public string ParameterOne { get; set; }
[DataMember]
public string ParameterTwo { get; set; }
}
这很重要的原因是因为WCF在尝试将数据从服务器序列化到客户端时的工作方式。本质上,服务器端的类是示意性地匹配客户端上生成的类。 (它们共享相同的类模式。)如果类没有适当的结构,则无法设置数据。成员基本上是只读的。
您班上现在拥有的是公共成员变量,并且它们设置为始终返回string.Empty
。 WCF无法使用它,它太严格了。服务器和客户端需要能够读取和写入所有DataMember
属性,因此您需要{ get; set; }
。
在进行此更改后,请不要忘记刷新服务参考。
如果您需要一些好的资源来学习WCF,请查看这些视频WCF Tutorial。它们有点过时,但所有概念仍然适用。
答案 1 :(得分:0)
这可能会迟到,我是WCF服务的新手,所以我根据我在我的案例中所做的事情分享,以便在不同项目之间共享数据。
我有一个WCF服务(主机),一个客户端和一个服务器项目。 (总共3个不同的项目。)我将在WCF服务中执行必要的计算。之后,我想将结果分享给客户端和服务器。因此,有一个变量,变量A,我在3个项目中共享。
在WCF服务中,我声明variableA
并将其标记为static
:
private **static** string variableA;
只有在我将variableA
标记为静态后,才能在不同的项目中看到相同的variableA
。
我不确定这是否有帮助,但这就是我在我的案例中所做的。