为什么我的第一个WCF服务器不工作(错误的值返回到客户端)
本文关键字:返回 客户端 错误 第一个 我的 WCF 服务器 工作 为什么 | 更新日期: 2023-09-27 18:09:25
这是我的第一个WCF服务器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
namespace Myns.MBClient
{
[ServiceContract]
public interface IManagementConsole
{
[OperationContract]
ConsoleData GetData(int strategyId);
}
[ServiceContract]
public class ConsoleData
{
private int currentIndicator;
[OperationContract]
public double GetCurrentIndicator()
{
return currentIndicator;
}
public void SetCurrentIndicator(int currentIndicator)
{
this.currentIndicator = currentIndicator;
}
}
class ManagementConsole : IManagementConsole
{
public ConsoleData GetData(int strategyId)
{
ConsoleData data = new ConsoleData();
data.SetCurrentIndicator(33);
return data;
}
}
}
在客户端我只调用pipeProxy.GetData(0).GetCurrentIndicator()
为什么程序打印0
而应该打印33
?
客户端代码(我认为没有问题):
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using Commons;
using myns.MBClient;
namespace myns.MBClientConsole
{
class Program
{
static void Main(string[] args)
{
ChannelFactory<IManagementConsole> pipeFactory =
new ChannelFactory<IManagementConsole>(
new NetNamedPipeBinding(),
new EndpointAddress(
"net.pipe://localhost/PipeMBClientManagementConsole"));
IManagementConsole pipeProxy =
pipeFactory.CreateChannel();
while (true)
{
string str = Console.ReadLine();
Console.WriteLine("pipe: " +
pipeProxy.GetData(0).GetCurrentIndicator());
}
}
}
}
如果你创建自己的复杂类型来与WCF一起使用,你必须添加一个DataContract属性而不是ServiceContract,并且你应该使用用DataMember装饰的字段/属性。帮你自己一个忙,使用普通的dto (DataTransferObjects -只有字段/属性但没有行为的对象):
[DataContract]
public class ConsoleData
{
[DataMember]
public int CurrentIndicator {get;set;}
}
你可以在这里找到更多信息