所以,我注意到FaultException
当我使用BasicHttpBinding
. 当我使用WSHttpBinding
它的工作文件。
FaultException
问题是,如果我在下面抛出类似的内容,则从 WCF 服务,
var translations = new List<FaultReasonText> { new FaultReasonText("FaultReasonText 1"), new FaultReasonText("FaultReasonText 2") };
throw new FaultException<MessageServiceFault>(MessageServiceFault.Fault1, new FaultReason(translations));
当它到达客户端时,fault.Reason.Translations
计数为 1。这意味着第一个 ( FaultReasonText 1
) 仅返回客户端。
但是当我使用时WSHttpBinding
计数是 2。问题出在哪里?谁可以帮我这个事。
当我使用BasicHttpBinding和 WSHttpBinding绑定测试以下代码时,它给了我不同的结果。
class Program
{
static void Main(string[] args)
{
try
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(MessageService), new Uri(baseAddress));
host.AddServiceEndpoint(typeof(IMessageService), new WSHttpBinding(), "");
host.Open();
Console.WriteLine("Host opened");
ChannelFactory<IMessageService> myChannelFactory = new ChannelFactory<IMessageService>(new WSHttpBinding(), new EndpointAddress(baseAddress));
IMessageService channel = myChannelFactory.CreateChannel();
var response = channel.GetMessage();
}
catch (FaultException fault)
{
fault.Reason.Translations.ToList().ForEach(i => Console.WriteLine(i.Text));
Console.WriteLine(false);
}
}
}
[ServiceContract]
public interface IMessageService
{
[OperationContract]
[FaultContract(typeof(MessageServiceFault))]
string GetMessage();
}
public class MessageService : IMessageService
{
public string GetMessage()
{
var translations = new List<FaultReasonText> { new FaultReasonText("FaultReasonText 1"), new FaultReasonText("FaultReasonText 2") };
throw new FaultException<MessageServiceFault>(MessageServiceFault.Fault1, new FaultReason(translations));
}
}
[DataContract]
public enum MessageServiceFault
{
[EnumMember]
Fault1,
[EnumMember]
Fault2
}
编辑:
但是,这篇文章说,您可以根据用户的语言设置提供许多不同的文本字符串。Translations 存储桶包含所有不同的文本字符串及其相关的文化标识符(由 FaultReasonText 绑定在一起)。当由于故障原因或翻译搜索未指定文化时,假定的文化是当前线程文化。例如,如果您想要翻译成“en-UK”,我们将首先查找“en-UK”,然后再查找“en”。如果我们仍然找不到匹配项,那么我们将采用列表中的第一个翻译,它可以是任何内容。
如果是这样,为什么如果WsHttpBinding
它返回我 2 FaultReasonText
?