C# 如何在服务项目(WCF)和其他项目之间共享数据
(编辑)->我有一个不同项目的解决方案。它有一个奇怪的结构,因为我不是一个专业的软件工程师。该解决方案由三部分组成:一个HMI项目(WPF)、业务项目(类库类型)和服务项目(WCF) 在business项目中,我做了一些有结果的过程,结果保存在一个静态类中。这个结果在前面提到的WPF项目的屏幕中公开,现在我需要通过WCF项目中的一个服务来传输这些数据 该对象类似于:C# 如何在服务项目(WCF)和其他项目之间共享数据,c#,wpf,wcf,C#,Wpf,Wcf,(编辑)->我有一个不同项目的解决方案。它有一个奇怪的结构,因为我不是一个专业的软件工程师。该解决方案由三部分组成:一个HMI项目(WPF)、业务项目(类库类型)和服务项目(WCF) 在business项目中,我做了一些有结果的过程,结果保存在一个静态类中。这个结果在前面提到的WPF项目的屏幕中公开,现在我需要通过WCF项目中的一个服务来传输这些数据 该对象类似于: [DataContract] public class ObjectToTransfer { [DataMember]
[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的对象为空。另外,当我在两个项目都运行的情况下调试解决方案时,静态类的属性中没有信息。。。这就像两个项目是否独立运行,尽管它们都在相同的解决方案下…,这就像它们之间是否没有关系。错在哪里
提前谢谢你 您需要做的主要事情是将
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服务的新手,因此我将根据我在不同项目之间共享数据的做法进行共享 我的项目背景: 我有一个WCF服务(主机)、一个客户端和一个服务器项目。(总共3个不同的项目。)我将在WCF服务中执行必要的计算。之后,我将把结果共享给客户机和服务器。因此,有一个变量variableA,我在3个项目中共享 我所做的: 在WCF服务中,我声明
variableA
并将其标记为static
:
private **static** string variableA;
只有在我将variableA
标记为static之后,我才能在不同的项目中看到相同的variableA
我不确定这是否有帮助,但这就是我在我的案例中所做的。静态对象在每个AppDomain中存在一次。无论如何,读取并创建一个.WCF在WPF项目中称为服务引用。就在通常的参考下面。我不理解你的评论凯李…非常感谢你的回答,但这并不能解决我的问题。。。我无法独立于setter和getter从WCF服务项目中读取静态类