gpt4 book ai didi

c# - WCF OperationContract 属性忘记值

转载 作者:行者123 更新时间:2023-11-30 21:15:49 24 4
gpt4 key购买 nike

最近successful getting my IIS hosted WCF service to work with basic authentication .

自从成功实现以来。我注意到没有记住属性值。

这是一些代码:

[ServiceContract]
public interface IEcho
{
string Message { [OperationContract]get; [OperationContract]set; }
[OperationContract]
string SendEcho();
}

public class EchoProxy : IEcho
{
public string Message { get; set; }
public string SendEcho()
{
return string.Concat("You said: ", Message);
}
}
public class EchoService : System.ServiceModel.ClientBase<IEcho>, IEcho
{
//-- ..... CONSTRUCTORS OMITTED ....

public string Message
{
get { return base.Channel.Message; }
set { base.Channel.Message = value; }
}
public string SendEcho()
{
return base.Channel.SendEcho();
}
}

这是控制台和结果:

EchoService client = new EchoService("SecureEndpoint");
client.ClientCredentials.UserName.UserName = "test";
client.ClientCredentials.UserName.Password = "P@ssword1";
client.Message = "Hello World";
Console.WriteLine(client.SendEcho());

预期结果:你说:Hello World
实际结果:你说:

我已将沙盒项目上传到我的 skydrive。我在 API 项目中包含了一个 SETUP.txt。

Click here to download.
我怎样才能让属性发挥作用?

谢谢

最佳答案

我从未见过 WCF 契约(Contract)与属性一起使用来传输数据。即 Message 属性。 AFAIK 这是不可能的。

我的建议是将作为契约(Contract)一部分的问题分开,即操作和数据。

[ServiceContract]
public interface IEcho
{
[OperationContract]
string SendEcho(string Message);
}

或者

[ServiceContract]
public interface IEcho
{
[OperationContract]
string SendEcho(Message message);
}

[DataContract]
public class Message
{
[DataMember]
public string Message {get; set;}
}

稍后您可能希望更改消息对象。

[DataContract]
public class MessageV2 : Message
{
[DataMember]
public DateTime Sent {get; set;}
}

虽然这会更改契约,但如果谨慎管理,此类更改可以向后兼容。

关于c# - WCF OperationContract 属性忘记值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com